首页 > 代码库 > 关于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大文件压缩
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。