将一个或多个文件,压缩为一个zip文件

it2022-05-05  81

/* 原文:https://blog.csdn.net/qq_38676810/article/details/79780094 */

public class ZipCompressor { static final int BUFFER = 8192;

private File zipFile; public ZipCompressor(String pathName) { zipFile = new File(pathName); } public void compress(String... pathName) { ZipOutputStream out = null; try { FileOutputStream fileOutputStream = new FileOutputStream(zipFile); CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32()); out = new ZipOutputStream(cos); //原文件的基础路径 String basedir = ""; for (int i=0;i<pathName.length;i++){ compress(new File(pathName[i]), out, basedir); } out.close(); } catch (IOException e) { throw new RuntimeException(e); } } public void compress(String srcPathName) { File file = new File(srcPathName); if (!file.exists()) throw new RuntimeException(srcPathName + "不存在!"); try { FileOutputStream fileOutputStream = new FileOutputStream(zipFile); CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32()); ZipOutputStream out = new ZipOutputStream(cos); String basedir = ""; compress(file, out, basedir); out.close(); }catch (Exception e){ throw new RuntimeException(e); } } private void compress(File file, ZipOutputStream out, String basedir) { /* 判断是目录还是文件 */ if (file.isDirectory()) { System.out.println("压缩:" + basedir + file.getName()); this.compressDirectory(file, out, basedir); }else { System.out.println("压缩:" + basedir + file.getName()); this.compressFile(file, out, basedir); } } /** 压缩一个目录 */ private void compressDirectory(File dir, ZipOutputStream out, String basedir){ if (!dir.exists()) return; File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { /* 递归 */ compress(files[i], out, basedir + dir.getName() + "/"); } } /** 压缩一个文件 */ private void compressFile(File file, ZipOutputStream out, String basedir){ if (!file.exists()) { return; } BufferedInputStream bis = null; try { bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(basedir + file.getName()); out.putNextEntry(entry); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } bis.close(); } catch (IOException e) { throw new RuntimeException(e); } } public File getZipFile() { return zipFile; } public void setZipFile(File zipFile) { this.zipFile = zipFile; }

}


最新回复(0)