• java将文件夹压缩成压缩包


    1.代码

    将文件夹递归达成压缩包,并且支持删除源文件

    public class PackageToZIp {
    
        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();
                //不删除源文件 就不用调用这个  要删除就调用
                deleteFile(sourceFile);
            } catch (IOException e) {
                System.out.println("failed to zip compress, exception");
                return false;
            }
            return true;
        }
    
        public static Boolean deleteFile(File file) {
            //判断文件不为null或文件目录存在
            if (file == null || !file.exists()) {
                System.out.println("文件删除失败,请检查文件是否存在以及文件路径是否正确");
                return false;
            }
            //获取目录下子文件
            File[] files = file.listFiles();
            //遍历该目录下的文件对象
            for (File f : files) {
                //判断子目录是否存在子目录,如果是文件则删除
                if (f.isDirectory()) {
                    //递归删除目录下的文件
                    deleteFile(f);
                } else {
                    //文件删除
                    f.delete();
                }
            }
            //文件夹删除
            file.delete();
            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());
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            PackageToZIp.toZip("d:\\Users\\chenkj\\Desktop\\target", "d:\\Users\\chenkj\\Desktop\\demo.zip");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
  • 相关阅读:
    JVM:虚拟机类加载机制
    C#_事件简述
    未来的嵌入式行业岗位发展怎么样?会不会越来越少?
    计算机网络-应用层(2)
    为什么 Spring的构造器注入不需要 @Autowired 注解
    2065. 最大化一张图中的路径价值 Hard
    第6章Spring与Web-使用 Spring 的监听器 ContextLoaderListener使得将spring容器对象创建一次即可,反复调用...
    小表join顺序和广播问题
    618快到了送上自制前端小项目(html css js)
    嵌入式养成计划-41----C++ auto--lambda表达式--C++中的数据类型转换--C++标准模板库(STL)--list--C++文件操作
  • 原文地址:https://blog.csdn.net/BrotherJinJin/article/details/126361515