您的位置:首页 > 编程语言 > Java开发

java 解压zip java.lang.IllegalArgumentException: MALFORMED 错误

2017-03-02 17:00 435 查看
zip压缩包在解压过程中,遇到了错误,提示如下

java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(Unknown Source)
at java.util.zip.ZipInputStream.readLOC(Unknown Source)
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
at com.yc.utils.TestZip.extZipFileList(TestZip.java:40)
at com.yc.utils.TestZip.main(TestZip.java:21)


查阅网上的资料,有一个说是编码的问题,看看老外怎么说,参考了一下,确实是编码的问题。附上我的部分解压缩代码

public static void unzip(String zipFilePath, String targetPath)
throws IOException {
OutputStream os = null;
InputStream is = null;
ZipFile zipFile = null;
try {
zipFile = new ZipFile(zipFilePath,Charset.forName("GBK"));
String directoryPath = "";
if (null == targetPath || "".equals(targetPath)) {
directoryPath = zipFilePath.substring(0, zipFilePath
.lastIndexOf("."));
} else {
directoryPath = targetPath;
}
Enumeration<?> entryEnum = zipFile.entries();
if (null != entryEnum) {
ZipEntry zipEntry = null;
while (entryEnum.hasMoreElements()) {
zipEntry = (ZipEntry) entryEnum.nextElement();
if (zipEntry.getSize() > 0) {
// 文件
File targetFile = FileUtil.buildFile(directoryPath
+ File.separator + zipEntry.getName(), false);
os = new BufferedOutputStream(new FileOutputStream(targetFile));
is = zipFile.getInputStream(zipEntry);
byte[] buffer = new byte[4096];
int readLen = 0;
while ((readLen = is.read(buffer, 0, 4096)) >= 0) {
os.write(buffer, 0, readLen);
os.flush();
}
is.close();
os.close();
}
if (zipEntry.isDirectory()) {
String pathTemp = directoryPath + File.separator
+ zipEntry.getName();
File file = new File(pathTemp);
file.mkdirs();
System.out.println(pathTemp);
// continue;
}
}
}
} catch (IOException ex) {
throw ex;
} finally {
if(null != zipFile){
zipFile.close();
zipFile = null;
}
if (null != is) {
is.close();
}
if (null != os) {
os.close();
}
}
}

声明:
zipFile = new ZipFile(zipFilePath,Charset.forName("GBK"));
不是所有压缩包的编码都是GBK,针对不同情况需要特殊处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java zip 解压 编码
相关文章推荐