Java 壓縮zip異常,java.util.zip.ZipException:duplicate entry: 問題
阿新 • • 發佈:2022-04-01
在測試過程中看到後臺列印的日誌出現異常,發現這也是歷史遺留問題
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應該做唯一處理