你好,我來自中國另一邊的太平洋。 請原諒我基本的英語。 國外網站的篩選導致更多問題。無法使用Zip4J在java中解壓縮
在我目前的項目中,我使用zip4j,但是出現了一個問題。這裏是我的代碼:
public static File [] unzip(File zipFile, String dest, String passwd) throws ZipException {
ZipFile zFile = new ZipFile(zipFile);
zFile.setFileNameCharset("GBK");
if (!zFile.isValidZipFile()) {
throw new ZipException("壓縮文件不合法,可能被損壞.");
}
File destDir = new File(dest);
if (destDir.isDirectory() && !destDir.exists()) {
destDir.mkdir();
}
if (zFile.isEncrypted()) {
zFile.setPassword(passwd.toCharArray());
}
zFile.extractAll(dest);
List<FileHeader> headerList = zFile.getFileHeaders();
List<File> extractedFileList = new ArrayList<File>();
for(FileHeader fileHeader : headerList) {
if (!fileHeader.isDirectory()) {
extractedFileList.add(new File(destDir,fileHeader.getFileName()));
}
}
File [] extractedFiles = new File[extractedFileList.size()];
extractedFileList.toArray(extractedFiles);
return extractedFiles;
}
後超過一定數量(我的文件2000)更壓縮包文件時出現的問題。 我使用了myeclipse開發工具和tomcat服務器。
我在myeclipse中使用了斷點,並沒有遇到任何錯誤。 沒有添加斷點,我直接操作錯誤:
net.lingala.zip4j.exception.ZipException: Compressed file is not valid, can be damaged.
at com.ninemax.cul.util.CompressUtil.unzip(CompressUtil.java:68)
at com.ninemax.cul.util.CompressUtil.unzip(CompressUtil.java:38)
at com.ninemax.cul.service.impl.SysShangChuanWenWuService.writeDataToDatabase(SysShangChuanWenWuService.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:311)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy48.writeDataToDatabase(Unknown Source)
at com.ninemax.cul.action.web.UserUploadAction.uploadSuccess(UserUploadAction.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
它是否始終是導致錯誤的文件?你的文件有多大可能是你的服務器內存達到了限制? – roel
'com.ninemax.cul.util.CompressUtil.unzip(CompressUtil.java:68)':這一行是什麼?也如果它是Windows只可能有一些編碼問題?你如何閱讀/寫入文件?你在使用'PrintWriter'還是'PrintReader'?那些採取系統默認編碼。另外:'在Windows環境中出現錯誤' - 即使你正常解壓縮(使用Windows程序如7z)? –