异常:
java.lang.IllegalArgumentException: MALFORMED
原代码:
public static void readZipFile(String file) throws Exception {
File fileNew = new File(file);
java.util.zip.ZipFile zf = new java.util.zip.ZipFile(fileNew);
InputStream in = new BufferedInputStream(new FileInputStream(fileNew));
java.util.zip.ZipInputStream zin = new java.util.zip.ZipInputStream(in);
java.util.zip.ZipEntry ze;
while ((ze = zin.getNextEntry()) != null) {
if (ze.isDirectory()) {
} else {
System.err.println("file - " + ze.getName() + " : " + ze.getSize() + " bytes");
long size = ze.getSize();
if (size > 0) {
InputStream fileInStream = zf.getInputStream(ze);
......
fileInStream.close();
}
}
}
zin.closeEntry();;
in.close();
zf.close();
}
出现原因:
zip包里包含有中文名的文件。
解决办法:
使用Apache的ant.jar
修改后代码:
public static void readZipFile(String file) throws Exception {
File fileNew = new File(file);
org.apache.tools.zip.ZipFile zf = new org.apache.tools.zip.ZipFile(fileNew);
Enumeration e = zf.getEntries();
org.apache.tools.zip.ZipEntry ze;
while(e.hasMoreElements()) {
ze = (org.apache.tools.zip.ZipEntry)e.nextElement();
if (ze.isDirectory()) {
} else {
System.err.println("file - " + ze.getName() + " : " + ze.getSize() + " bytes");
long size = ze.getSize();
if (size > 0) {
InputStream fileInStream = zf.getInputStream(ze);
......
fileInStream.close();
}
}
}
zf.close();
}