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;
        }
    }
  • 相关阅读:
    对象引用与对象克隆
    谁被回收了
    SpringMVC 返回json
    html基础
    org.hibernate.HibernateException: No Session found for current thread
    VB6之SendMessage模拟拖放事件
    VB6之GIF分解
    VB6之反编译工具VBRezQ
    VB6之WebBrowser控件
    (转载)VB6之鼠标移出事件
  • 原文地址:https://www.cnblogs.com/luyang08/p/13925779.html
Copyright © 2011-2022 走看看