首页 > 代码库 > 关于ZIP大文件压缩

关于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

关于ZIP大文件压缩