zoukankan      html  css  js  c++  java
  • zip压缩

    package io;
    
    import static org.apache.commons.compress.archivers.zip.ZipArchiveEntry.PLATFORM_UNIX;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.nio.charset.StandardCharsets;
    import java.nio.file.Files;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
    import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
    import org.apache.commons.compress.utils.IOUtils;
    
    public class CpmpressTest {
    
        public static void main(String[] args) {
            File zipFile = new File("I://中国.zip");
            File dir = new File("I:\aaa\event_20201104");
            apacheCompress(zipFile, dir.listFiles());
        }
    
        /**
         *  jdk   util.zip 实现
         * @param zipFile
         * @param files
         * @return
         */
        public static File jdkCompress(File zipFile, File[] fs) {
            long begin = System.currentTimeMillis();
            File rsFile = null;
            try (FileOutputStream fos = new FileOutputStream(zipFile);
                    ZipOutputStream zos = new ZipOutputStream(fos, StandardCharsets.UTF_8);) {
                rsFile = zipFile;
                int index =1;
                for (File file : fs) {
                    byte[] buf = new byte[4 * 1024];
                    String name = "中国/" + file.getName();
                    ZipEntry ze = new ZipEntry(name);
                    zos.putNextEntry(ze);
                    int len;
                    try (FileInputStream in = new FileInputStream(file)) {
                        while ((len = in.read(buf)) != -1) {
                            zos.write(buf, 0, len);
                        }
                        zos.closeEntry();
                    }
                    System.out.println("第"+index+"个完成,耗时(ms):"+(System.currentTimeMillis() - begin));
                    index++;
                }
            } catch (Exception e) {
            }
            System.out.println(System.currentTimeMillis() - begin);
            return rsFile;
        }
    
        /**
         *  解决linux中文文件名乱码(common-Compress实现) 
         * @param zipFile
         * @param files
         * @return
         */
        public static File apacheCompress(File zipFile, File[] files)  {
            long begin = System.currentTimeMillis();
            File rsFile = null;
            try (
                    ZipArchiveOutputStream zipOutput =  new ZipArchiveOutputStream(zipFile);
            ){
                    rsFile = zipFile;
                    int index =1;
                    for (File f : files) {
                        //测试中文:添加了中国的包前缀
                        String name =  "中国/"+ f.getName();
                        // 获取每个文件相对路径,作为在ZIP中路径,读取文件大小 及修改时间
                        ZipArchiveEntry entry = (ZipArchiveEntry)(zipOutput.createArchiveEntry(f, name));
                        entry.setUnixMode(PLATFORM_UNIX);
                        zipOutput.putArchiveEntry(entry);
                        if (f.isFile()) {
                            try (InputStream i = Files.newInputStream(f.toPath())) {
                                IOUtils.copy(i, zipOutput);
                            }
                        }
                        zipOutput.closeArchiveEntry();
                        System.out.println("第"+index+"个完成,耗时(ms):"+(System.currentTimeMillis() - begin));
                        index++;
                    }
                zipOutput.finish();
                System.out.println(System.currentTimeMillis() - begin);
            }catch (Exception e) {
                // TODO: handle exception
            }
            return rsFile;
        }
    }
  • 相关阅读:
    N4-某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
    N3-按链表值从尾到头的顺序返回一个ArrayList。
    N2-替换字符串空格
    innodb死锁1213
    innodb是行锁还是表锁
    docker是什么,docker干什么用
    innodb通过frm ibd还原数据,线上项目验证过
    机器性能预警系统(cpu,process,内存,硬盘监控)并钉钉机器人报警
    mysql++ query.more_results()为true时,query.store_next()就崩掉了
    yum install nload失败,提示No package nload available.Error: Nothing to do
  • 原文地址:https://www.cnblogs.com/luyang08/p/13925779.html
Copyright © 2011-2022 走看看