Java如何压缩文件或文件夹呢?
下文笔者讲述java压缩文件或文件夹的方法分享,如下所示
实现思路: 借助ZipOutputStream即可实现对文件或文件夹进行压缩操作 注意事项: 在关闭ZipOutputStream流之前 需先调用flush()方法 强制将缓冲区所有的数据输出 以避免解压文件时出现压缩文件已损坏的现象例:
/** * @param source 待压缩文件/文件夹路径 * @param destination 压缩后压缩文件路径 * @return */ public static boolean toZip(String source, String destination) { try { FileOutputStream out = new FileOutputStream(destination); ZipOutputStream zipOutputStream = new ZipOutputStream(out); File sourceFile = new File(source); // 递归压缩文件夹 compress(sourceFile, zipOutputStream, sourceFile.getName()); zipOutputStream.flush(); zipOutputStream.close(); } catch (IOException e) { System.out.println("failed to zip compress, exception"); return false; } return true; } private static void compress(File sourceFile, ZipOutputStream zos, String name) throws IOException { byte[] buf = new byte[1024]; if(sourceFile.isFile()){ // 压缩单个文件,压缩后文件名为当前文件名 zos.putNextEntry(new ZipEntry(name)); // copy文件到zip输出流中 int len; FileInputStream in = new FileInputStream(sourceFile); while ((len = in.read(buf)) != -1){ zos.write(buf, 0, len); } zos.closeEntry(); in.close(); } else { File[] listFiles = sourceFile.listFiles(); if(listFiles == null || listFiles.length == 0){ // 空文件夹的处理(创建一个空ZipEntry) zos.putNextEntry(new ZipEntry(name + "/")); zos.closeEntry(); }else { // 递归压缩文件夹下的文件 for (File file : listFiles) { compress(file, zos, name + "/" + file.getName()); } } } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。