采用的是 ant-1.9.7jar包
代码先上传:
package cloud.prj.donson.imp.api;
import java.io.*;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtil {
//参数是文件路径和文件名
public static File Compress(File dir, String fileName)
{
//new 一个zip文件
File zip=new File(dir+".zip");
try
{
ZipOutputStream zos;
//最终用该输出流将内容输出到该zip文件中
zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zip)));
//设置编码格式
zos.setEncoding("UTF-8");
compress(zos, dir, fileName);
zos.close();//一定得关闭流,否则会出问题
}
catch(Exception ex)
{
}
return zip;
}
/**该方法采用递归,分别逐步压缩文件和文件夹,形成输入流和输出流
*/
private static void compress(ZipOutputStream zos, File f, String fileName) throws IOException {
if (f.isDirectory()) {
// 压缩文件夹
File[] fl = f.listFiles();
zos.putNextEntry(new ZipEntry(fileName + "/"));
fileName = fileName.length() == 0 ? "" : fileName + "/";
for (int i = 0; i < fl.length; i++) {
compress(zos, fl[i], fileName + fl[i].getName());
}
} else {
// 压缩文件
zos.putNextEntry(new ZipEntry(fileName));
FileInputStream fis = new FileInputStream(f);
inStream2outStream(fis, zos);
fis.close();
zos.closeEntry();
}
}
//用输入流和输出流进行传输
private static void inStream2outStream(InputStream is, OutputStream os) throws IOException {
BufferedInputStream bis = new BufferedInputStream(is);
BufferedOutputStream bos = new BufferedOutputStream(os);
int bytesRead = 0;
for (byte[] buffer = new byte[1024]; ((bytesRead = bis.read(buffer, 0, 1024)) != -1);) {
bos.write(buffer, 0, bytesRead); // 将流写入
}
bos.flush();
}
//测试是否压缩成功
public static void main(String[] args) {
File file=new File("D:\\echo\\java code");
Compress(file,"java code");
}
}
总结下:代码并不复杂,主要逻辑是在递归那边。很好的实现了压缩。
jar包下载地址:https://download.csdn.net/download/echohuangshihuxue/10613561