[英]unable to create zip file in java useing java.util.zip, getting archive is corrupt
[英]Java util zip creates “corrupt” zip files
我正在壓縮目錄的內容,但在嘗試打開壓縮文件時遇到錯誤。
誰能告訴我代碼發生了什么? 也許我沒有分配足夠的字節?
查看zipDirectory()內部,您將看到我正在壓縮包含特殊擴展文件的文件夾。
不確定錯誤發生在哪里,所以也許有人可以幫助我!
非常感激
private void zipDirectory() {
File lazyDirectory = new File(defaultSaveLocation);
File[] files = lazyDirectory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
System.out.println("Zipping up " + file);
zipContents(file);
}
}
}
public static void addToZip(String fileName, ZipOutputStream zos) throws FileNotFoundException, IOException {
System.out.println("Writing '" + fileName + "' to zip file");
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(fileName);
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
fis.close();
}
public static void zipContents(File dirToZip) {
List<File> fileList = new ArrayList<File>();
File[] filesToZip = dirToZip.listFiles();
for (File zipThis : filesToZip) {
String ext = "";
int i = zipThis.toString().lastIndexOf('.');
if (i > 0) {
ext = zipThis.toString().substring(i+1);
}
if(ext.matches("cpp|bem|gz|h|hpp|pl|pln|ppcout|vec|xml|csv")){
fileList.add(zipThis);
}
}
try {
FileOutputStream fos = new FileOutputStream(dirToZip.getName() + ".zip");
ZipOutputStream zos = new ZipOutputStream(fos);
for (File file : fileList) {
addToZip(file.toString(), zos);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
與Java中IO流的大多數問題一樣,您的錯誤幾乎肯定是您沒有正確關閉流。 你需要添加:
zos.finish(); // good practice
zos.close();
在for循環之后。
對我來說,修復是你需要為每個文件條目執行此操作
zos.finish()
zos.flush()
zos.closeEntry()
然后再做上述事情來關閉zos
。 否則,默認窗口無法正確打開壓縮文件夾,但第三方應用程序可以正常工作。
如果您使用面向字符的編寫器(例如FileWriter)來創建解壓縮的文件(實際上包含二進制數據),也可能發生這種情況
我無法讀取我正在提取的文件並切換到二進制輸出流(FileOutputStream)修復了該問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.