• 关于ZIP大文件压缩


    实测:4.76 GB一个单文件压缩没有什么问题。

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.commons.compress.archivers.ArchiveEntry;
    import org.apache.commons.compress.archivers.zip.Zip64Mode;
    import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
    import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
    import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
    
    public class ZipHelper {
        
        public static void main(String[] args) {
            File[] files=new File[1];
            File tmpFile=new File("F:\ios10.8.2\macos.dmg");
            files[0] = tmpFile;
            File zipFile=new File("F:\ios10.8.2\test.zip");
            ZipHelper.zipFiles(files, zipFile);
        }
        public static boolean zipFiles(File[] files, File zipFile) {
            boolean flag = false;
            if (files != null && files.length > 0) {
                ZipArchiveOutputStream zaos = null;
                try {
                    zaos = new ZipArchiveOutputStream(zipFile);
                    // Use Zip64 extensions for all entries where they are required
                    zaos.setUseZip64(Zip64Mode.AsNeeded);
    
                    // 将每个文件用ZipArchiveEntry封装
                    // 再用ZipArchiveOutputStream写到压缩文件中
                    for (File file : files) {
                        if (file != null) {
                            ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file, file.getName());
                            zaos.putArchiveEntry(zipArchiveEntry);
                            InputStream is = null;
                            try {
                                is = new FileInputStream(file);
                                byte[] buffer = new byte[1024 * 5];
                                int len = -1;
                                while ((len = is.read(buffer)) != -1) {
                                    // 把缓冲区的字节写入到ZipArchiveEntry
                                    zaos.write(buffer, 0, len);
                                }
                                zaos.closeArchiveEntry();
                            } catch (Exception e) {
                                flag = false;
                            } finally {
                                if (is != null)
                                    is.close();
                            }
                        }
                    }
                    zaos.finish();
                    flag=true;
                } catch (Exception e) {
                    flag = false;
                } finally {
                    try {
                        if (zaos != null) {
                            zaos.close();
                        }
                    } catch (IOException e) {
                        flag = false;
                    }
                }
            }
    
            return flag;
        }
        
         /**
          * 解压缩ZIP文件,将ZIP文件里的内容解压到saveFileDir目录下
          * @param zipFilePath 待解压缩的ZIP文件名
          * @param saveFileDir 目标目录
          */
        public static boolean upzipFile(String zipFilePath, String saveFileDir) {
            boolean flag = false;
            File file = new File(zipFilePath);
            if (file.exists()) {
                InputStream is = null;
                ZipArchiveInputStream zais = null;
                try {
                    is = new FileInputStream(file);
                    zais = new ZipArchiveInputStream(is);
                    ArchiveEntry archiveEntry = null;
                    // 把zip包中的每个文件读取出来
                    // 然后把文件写到指定的文件夹
                    while ((archiveEntry = zais.getNextEntry()) != null) {
                        // 获取文件名
                        String entryFileName = archiveEntry.getName();
                        // 构造解压出来的文件存放路径
                        String entryFilePath = saveFileDir + entryFileName;
                        byte[] content = new byte[(int) archiveEntry.getSize()];
                        zais.read(content);
                        OutputStream os = null;
                        try {
                            // 把解压出来的文件写到指定路径
                            File entryFile = new File(entryFilePath);
                            os = new FileOutputStream(entryFile);
                            os.write(content);
                        } catch (IOException e) {
                            flag = false;
                        } finally {
                            if (os != null) {
                                os.flush();
                                os.close();
                            }
                        }
                    }
                    flag=true;
                } catch (Exception e) {
                    flag = false;
                } finally {
                    try {
                        if (zais != null) {
                            zais.close();
                        }
                        if (is != null) {
                            is.close();
                        }
                    } catch (IOException e) {
                        flag = false;
                    }
                }
            }
            return flag;
        }
    
    }

    下载commons-compress-1.9.zip

  • 相关阅读:
    python线程的几种创建方式
    python进程之间的通信——Queue
    python中进程的几种创建方式
    python中的生成器、迭代器、闭包、装饰器
    java中String和StringBuffer的区别
    python中的元类介绍
    宣传片制作技巧
    树莓派创建WiFi热点
    PCB布线要求
    jsoncpp linux平台编译和arm移植
  • 原文地址:https://www.cnblogs.com/skyblue/p/4151541.html
Copyright © 2020-2023  润新知