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();