我使用非常標準的代碼創建了一個帶有ZipOutputStream
的zip文件。由於某種原因,當我將其作爲ZipInputStream
讀回來時,ZipEntry
有size=-1
。文件名正確存儲在ZipEntry
中。 (當我使用我的操作系統工具製作一個zip文件,然後再讀回來,大小是正確的,所以我假設問題與ZipOutputStream
而不是ZipInputStream
)。ZipOutputStream離開大小= -1
上下文是一個Spring MVC控制器。
我在做什麼錯? 謝謝。
下面是代碼:
// export zip file
String file = "/Users/me/Desktop/test.jpg";
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file+".zip");
ZipOutputStream zos = new ZipOutputStream(fos);
zos.putNextEntry(new ZipEntry("test.jpg"));
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) > 0) {
zos.write(buffer, 0, bytesRead);
}
zos.closeEntry();
zos.close();
fis.close();
// import same file
String file2 = "/Users/me/Desktop/test.jpg.zip";
FileInputStream fis2 = new FileInputStream(file2);
ZipInputStream zis = new ZipInputStream(fis2);
ZipEntry entry = zis.getNextEntry();
// here: entry.getSize() = -1, zip.buf is an array of zeros...
// but if I unzip the file on my OS I see that the original file has been zipped...
你是否在壓縮zip文件? 'ZipEntry entry = new ZipEntry(filename +「。zip」);' – jlordo
順便說一句,一個好主意。雙拉鍊? =) – user
其實沒有。即使使用不同的擴展名,問題仍然存在 – bz3x