Java如何压缩文件或文件夹呢?

乔欣 Java经验 发布时间:2022-11-29 22:36:23 阅读数:18666 1
下文笔者讲述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());
            }
        }
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202211/16697329334990.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者