1、报错原因
使用java.util.zip包进行压缩文件时,压缩包内的文件的文件名乱码,以下是部分代码
//导入的包
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
//生成压缩包,将文件写入到压缩包
int len;
byte[] buf = new byte[2048];
OutputStream oStream = new FileOutputStream(zipFile);
ZipOutputStream zipOut = new ZipOutputStream(oStream);
for (int i = 0; i < srcFile.length; i++) {
FileInputStream in = new FileInputStream(srcFile[i]);
zipOut.putNextEntry(new ZipEntry(srcFile[i].getName()));
logger.info("压缩里的文件的文件名="+srcFile[i].getName());
while ((len = in.read(buf)) > 0) {
zipOut.write(buf, 0, len);
}
zipOut.closeEntry();
in.close();
}
zipOut.close();2、现象

3、解决办法
将java.util.zip包改成import org.apache.tools.zip包。maven导入:
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.4</version>
</dependency>//导入的包
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;代码添加编码格式:zipOut.setEncoding("GBK");
int len;
byte[] buf = new byte[2048];
OutputStream oStream = new FileOutputStream(zipFile);
ZipOutputStream zipOut = new ZipOutputStream(oStream);
for (int i = 0; i < srcFile.length; i++) {
FileInputStream in = new FileInputStream(srcFile[i]);
zipOut.putNextEntry(new ZipEntry(srcFile[i].getName()));
// 支持中文
zipOut.setEncoding("GBK");
logger.info("压缩里的文件的文件名="+srcFile[i].getName());
while ((len = in.read(buf)) > 0) {
zipOut.write(buf, 0, len);
}
zipOut.closeEntry();
in.close();
}
zipOut.close();

本文介绍了解决使用Java进行文件压缩时遇到的文件名乱码问题的方法。通过替换使用的压缩库并设置正确的编码格式,成功解决了中文文件名显示为乱码的问题。
1262

被折叠的 条评论
为什么被折叠?



