1. 程式人生 > 其它 >Java 壓縮zip異常,java.util.zip.ZipException:duplicate entry: 問題

Java 壓縮zip異常,java.util.zip.ZipException:duplicate entry: 問題

在測試過程中看到後臺列印的日誌出現異常,發現這也是歷史遺留問題

java.util.zip.ZipException: duplicate entry: 111111.txt
	at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:215)

出現這種錯誤的原因是:打包的過程中,出現相同的檔名稱

關鍵程式碼

public static void doCompress(File file, ZipOutputStream out) throws IOException {
    if( file.exists() ){
        byte[] buffer = new byte[1024];
        FileInputStream fis = new FileInputStream(file);
        out.putNextEntry(new ZipEntry(file.getName()));
        int len = 0 ;
        // 讀取檔案的內容,打包到zip檔案
        while ((len = fis.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
        out.flush();
        out.closeEntry();
        fis.close();
    }
}

注意這裡

out.putNextEntry(new ZipEntry(file.getName()));

引數file.getName()存在相同的檔名稱時,就會出現開頭處的異常資訊。

解決方法:
針對檔名做唯一處理,後面見加上時間戳資訊,也可以加上別的資料,避免檔名一致

也就是在方法doCompress的引數file中,name應該做唯一處理