1

プログラムで epub の html ファイルを編集する必要があるため、.epub を解凍し、html ファイルに必要な編集を行うパーサーを作成しました。ただし、コードを使用してそれらを .epub に戻すと、EpubChecker は次のことを示します。

Error: Required META-INF/container.xml resource is missing

編集した .epub を解凍すると、container.xml が存在し、欠落していません。

最初に MIME タイプと META-INF を圧縮する必要があることを理解しています。ファイルを epub に変換するコードは次のとおりです。

    FileOutputStream fos = new FileOutputStream(zipFile);
    ZipOutputStream zos = new ZipOutputStream(fos);

    System.out.println("Output to Zip : " + zipFile);
    writeMimeType(zos);
    ZipEntry container = new ZipEntry("META-INF\\container.xml");
    zos.putNextEntry(container);
    FileInputStream inMime2 = new FileInputStream(SOURCE_FOLDER + File.separator + "META-INF\\container.xml");
    int len2;
    while((len2 = inMime2.read(buffer)) > 0){
        zos.write(buffer, 0, len2);
    }
    inMime2.close();
    for(String file : this.fileList){
            if(!file.toString().equals("mimetype") && !file.toString().equals("META-INF\\container.xml")){
                System.out.println("File Added : " + file);
                ZipEntry ze= new ZipEntry(file);
                zos.putNextEntry(ze);

                FileInputStream in = 
                    new FileInputStream(SOURCE_FOLDER + File.separator + file);

                int len;
                while ((len = in.read(buffer)) > 0) {
                        zos.write(buffer, 0, len);
                }

                in.close();
           }
    }

    zos.closeEntry();
    zos.close();

WinRar を使用してディレクトリを手動で zip すると、エラーは表示されず、正しく機能します。何が間違っているのかわかりません。誰か助けてくれませんか?ありがとう。

4

1 に答える 1

1

Windowsを使用しているように見えるので、FileInputStream(SOURCE_FOLDER + File.separator + "META-INF\\container.xml");ステートメントはOSに対して正しいですが、zipentryパスにスラッシュを使用するには、他の2つの文字列を変更する必要があると思います。

ZipEntry container = new ZipEntry("META-INF\\container.xml");

代わりに

ZipEntry container = new ZipEntry("META-INF/container.xml");

と変更

if(!file.toString().equals("mimetype") && !file.toString().equals("META-INF\\container.xml")){

if(!file.toString().equals("mimetype") && !file.toString().equals("META-INF/container.xml")){

によると。

他の人も調整する必要があるかもしれませんZipEntryZIP仕様(セクション「4.4.17ファイル名」)から:

すべてのスラッシュは、後方スラッシュ'\'ではなく前方スラッシュ'/'でなければなりません

于 2012-12-23T21:32:02.343 に答える