package com.sofree.common.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtil {
/**
* 将文件夹打包成zip文件
* @param fileName zip文件名
* @param filePath 文件夹路径
*/
public static void toZip(String fileName, String filePath) {
try {
ZipOutputStream zo = new ZipOutputStream(new FileOutputStream(fileName));
zo.setEncoding(System.getProperty("sun.jnu.encoding"));
File folder = new File(filePath);
if (folder.exists() && folder.isDirectory()) {
File[] files = folder.listFiles();
for (File file : files) {
String file2Name = file.getName();
byte[] byt = new byte[(int) file.length()];
FileInputStream fi = new FileInputStream(file);
fi.read(byt);
zo.putNextEntry(new ZipEntry(file2Name));
zo.write(byt);
fi.close();
}
zo.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
直接帖上实现类,这里有几个地方要注意
1. 使用了apache的ant的实现,需要引入依赖
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.5</version>
</dependency>
一开始使用的是jdk自己的zip实现,发现中文乱码问题解决不了。
2. 注意下面这句,设置编码,如果不加这句,我发现还是中文乱码。
zo.setEncoding(System.getProperty("sun.jnu.encoding"));
另外有看到说用apache 旗下的commons-compress 库,也可以很好解决中文乱码问题,我还没有尝试,参考http://hw1287789687.iteye.com/blog/1976309