ziputil java.lang.IllegalArgumentException: MALFORMED
时间: 2025-02-11 11:24:45 浏览: 68
### 解决 Java 中 `ZipUtil` 导致的 `java.lang.IllegalArgumentException: MALFORMED` 异常
当遇到 `java.lang.IllegalArgumentException: MALFORMED` 的异常时,通常是因为压缩文件中的字符编码不匹配所引起的。具体来说,在创建 `ZipInputStream` 或者 `ZipFile` 对象时不指定正确的字符集可能会导致此问题。
对于使用GBK编码压缩的ZIP文件,在解压过程中应当显式指明该编码方式来避免上述异常的发生。以下是两种不同的方法来解决问题:
#### 方法一:通过 `ZipInputStream`
如果程序中直接操作输入流来进行解压缩工作,则可以在初始化 `ZipInputStream` 实例的同时传入所需的字符集对象作为参数之一[^1]。
```java
import java.io.FileInputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipExample {
public static void unzip(String filePath) throws Exception {
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(filePath), Charset.forName("GBK"))) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
System.out.println(entry.getName());
// 处理每一个条目...
}
}
}
}
```
#### 方法二:利用 `ZipFile`
另一种常见的方式是借助于 `ZipFile` 类完成整个ZIP档案的操作。同样地,这里也需要提供相应的字符集给构造函数以确保能够正确解析其中的内容[^2]。
```java
import java.io.File;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class ZipFileExample {
public static void listEntries(File zipFile) throws Exception {
try (ZipFile zf = new ZipFile(zipFile, Charset.forName("GBK"))) {
Enumeration<? extends ZipEntry> entries = zf.entries();
while (entries.hasMoreElements()) {
ZipEntry ze = entries.nextElement();
System.out.println(ze.getName());
}
}
}
}
```
这两种方案都可以有效地防止由于默认采用 UTF-8 编码而导致的 `MALFORMED` 错误。选择哪种取决于具体的业务场景以及个人偏好。
阅读全文
相关推荐


















