首页 > 编程语言 >java并行压缩文件

java并行压缩文件

时间:2023-01-30 13:34:58浏览次数:401  
标签:java zipArchiveEntry 并行 压缩文件 parallelScatterZipCreator zipArchiveOutputStream ne

/**
     *  批量压缩文件 v4.0
     *
     * @param fileNames 需要压缩的文件名称列表(包含相对路径) 
     * @param zipOutName 压缩后的文件名称
     **/
public static void compressFileList(String zipOutName, List<String> fileNameList) throws IOException, ExecutionException, InterruptedException {
        ThreadFactory factory = new ThreadFactoryBuilder().setNameFormat("compressFileList-pool-").build();
        ExecutorService executor = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(20), factory);
        ParallelScatterZipCreator parallelScatterZipCreator = new ParallelScatterZipCreator(executor);
        OutputStream outputStream = new FileOutputStream(zipOutName);
        ZipArchiveOutputStream zipArchiveOutputStream = new ZipArchiveOutputStream(outputStream);
        zipArchiveOutputStream.setEncoding("UTF-8");
        for (String fileName : fileNameList) {
            File inFile = new File(fileName);
            final InputStreamSupplier inputStreamSupplier = () -> {
                try {
                    return new FileInputStream(inFile);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    return new NullInputStream(0);
                }
            };
            ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(inFile.getName());
            zipArchiveEntry.setMethod(ZipArchiveEntry.DEFLATED);
            zipArchiveEntry.setSize(inFile.length());
            zipArchiveEntry.setUnixMode(UnixStat.FILE_FLAG | 436);
            parallelScatterZipCreator.addArchiveEntry(zipArchiveEntry, inputStreamSupplier);
        }
        parallelScatterZipCreator.writeTo(zipArchiveOutputStream);
        zipArchiveOutputStream.close();
        outputStream.close();
        log.info("ParallelCompressUtil->ParallelCompressUtil-> info:{}", JSONObject.toJSONString(parallelScatterZipCreator.getStatisticsMessage()));
    }

  

标签:java,zipArchiveEntry,并行,压缩文件,parallelScatterZipCreator,zipArchiveOutputStream,ne
From: https://www.cnblogs.com/walt/p/17075453.html

相关文章

  • 【参考答案】java基础练习:数组(一维、二维、传值传地址)
    一维数组定义一个int类型数组,动态赋值,然后将数组中元素反转,最后输出,要求:动态赋值定义方法;反转定义方法packagecom.qzcsbj;importjava.util.Arrays;importjava.util.Scann......
  • 【参考答案】java基础练习:循环结构(while、do...while、for、break、continue、return
    while while实现:输出比i(i=5)小的正整数packagecom.qzcsbj;publicclassTest{publicstaticvoidmain(String[]args){inti=5;while(--i>0){......
  • 【参考答案】java基础练习:选择结构(if、switch)
    if:if...else...及if嵌套提示用户输入三个整数,判断并输出最大值、最小值 packagecom.qzcsbj;importjava.util.Scanner;publicclassTest{publicstaticvoidmain(S......
  • 【参考答案】java基础练习:变量、数据类型、输入、输出、运算符
     练习1:判断输入的值是否是偶数,另外,要处理输入错误(目的:熟悉输入、输出,特别是Scanner对象的方法)packagecom.qzcsbj;importjava.util.Scanner;publicclassTest{publi......
  • 为什么java开发平台有前途?
    在大数据时代,随着计算机应用的普及以及办公自动化的兴盛发展,提质增效的低代码开发平台迎来了快速发展时期。今天就给大家介绍java开发平台,通过本文介绍可以清楚地了解低代......
  • airlift java rest 服务框架
    airlift是一个轻量,快速的javarest服务开发框架,属于trino的基础框架,airlift集成了不少轻量的工具包同时包含了不少不错的实践(比如配置管理,组件生命周期管理,http客户端,......
  • java 高质量编程,正反例分析
    导读世界上只有两种物质:高效率和低效率;世界上只有两种人:高效率的人和低效率的人。----萧伯纳常量&变量直接赋值常量,禁止声明新对象直接赋值常量值,只是创建了一个对象引用,而......
  • 【Java项目推荐】值得写到简历上的项目--黑马点评
    优惠卷秒杀​​前言​​​​优惠券秒杀​​​​实现优惠券秒杀下单​​​​超卖问题​​​​一人一单​​​​分布式锁​​​​redis中加锁的一些特殊情况​​​​手动实现......
  • Java锁
    Java锁悲观锁概述认为自己在使用数据的时候一定有别的线程跟修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。synchronized关键字和Lock的实现类都......
  • Java I/O经典代码实例
    packageIO;importjava.io.*;publicclassFileDirectoryDemo{publicstaticvoidmain(String[]args){//如果没有指定参数,则缺省为当前目录。if(args.length==......