[英]How to use java.util.zip for epub
我必須以編程方式編輯epubs的html文件,所以我要做的是解壓縮.epub並創建解析器以對html文件進行必要的編輯。 但是,當我使用代碼將它們轉換回.epub時,EpubChecker顯示:
Error: Required META-INF/container.xml resource is missing
當我解壓縮編輯的.epub時,container.xml存在並且不丟失。
我知道必須先壓縮mimetype和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手動壓縮目錄時,沒有看到錯誤,並且可以正常工作。 我不知道我在做什么錯。 有人可以幫我嗎?謝謝。
看起來就像您在Windows上,因此您的FileInputStream(SOURCE_FOLDER + File.separator + "META-INF\\\\container.xml");
聲明對於操作系統是正確的,但是我想您需要更改其他2個字符串以對zipentry路徑使用正斜杠。
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")){
相應地。
您可能還需要調整其他ZipEntry
。 從ZIP規范 (“ 4.4.17文件名”部分):
所有斜杠必須是正斜杠“ /”,而不是反斜杠“ \\”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.