栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java8 压缩文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java8 压缩文件

  1. 按目录结构压缩文件
  2. 如果是空目录,也要进行压缩

@Log4j2
public class FileCompressUtil {

    public static void main(String[] args) {
        write("C:\Users\Desktop\测试数据文件\magic-oss.jar", "C:\Users\Desktop\测试数据文件\100.zip");
    }

    
    public static void write(String srcPath, String descFile) {
        try (
                final OutputStream outputStream = Files.newOutputStream(Paths.get(descFile));
                final ZipOutputStream zos = new ZipOutputStream(outputStream)
        ) {
            final Path path = Paths.get(srcPath);
            if (Files.notExists(path)) {
                throw new BusinessException("文件路径不存在!");
            }
            writeIO(path, zos, path.getFileName().toString());
        } catch (Exception e) {
            log.error("FileCompressUtil.writeIO...e=", e);
        }
    }

    
    public static void write(String srcPath, HttpServletResponse response) {
        try (
                final ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())
        ) {
            final Path path = Paths.get(srcPath);
            if (Files.notExists(path)) {
                throw new BusinessException("文件路径不存在!");
            }
            writeIO(path, zos, path.getFileName().toString());
        } catch (Exception e) {
            log.error("FileCompressUtil.writeIO...e=", e);
        }
    }

    @SneakyThrows
    private static void writeIO(Path path, ZipOutputStream zos, String fileName) {
        if (Files.isDirectory(path)) {
            final List list = Files.list(path).collect(Collectors.toList());
            if (CollectionUtils.isEmpty(list)) {
                // 写入空文件夹
                zos.putNextEntry(new ZipEntry(fileName + "/"));
            }
            for (Path p : list) {
                writeIO(p, zos, fileName + "/" + p.getFileName().toString());
            }
        } else {
            try (
                    final BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(path));
            ) {
                int len;
                byte[] b = new byte[8192];
                zos.putNextEntry(new ZipEntry(fileName));
                while ((len = bis.read(b)) != -1) {
                    zos.write(b, 0, len);
                }
            } catch (Exception e) {
                log.error("FileCompressUtil.writeIO...e=", e);
            }
        }

    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865474.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号