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

时间: 2024-11-05 18:27:59

关于ZIP大文件压缩的相关文章

利用ICSharpCode.SharpZipLib.Zip进行文件压缩

官网http://www.icsharpcode.net/ 支持文件和字符压缩. 创建全新的压缩包 第一步,创建压缩包 using ICSharpCode.SharpZipLib.Zip; ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create(strZipPath)); 参数:strZipPath,提供压缩后的文件包全路径,即地址和文件名.如,D:\tmp\01.rar第二步,向压缩包中添加压缩包的文件名 ICShar

34模块-zip【文件压缩和解压、图片压缩和编辑】

Zip模块管理文件压缩和解压,通过plus.zip可获取压缩管理对象. 比较常用的就是  对图片进行压缩.转码.旋转操作了 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no&q

文件压缩、解压工具类。文件压缩格式为zip

package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; impor

Java实现文件压缩与解压[zip格式,gzip格式]

Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并不将文件归档,仅只是对单个文件进行压缩,所以,在UNIX平台上,命令tar通常用来创建一个档案文件,然后命令gzip来将档案文件压缩. Java I/O类库还收录了一些能读写压缩格式流的类.要想提供压缩功能,只要把它们包在已有的I/O类的外面就行了.这些类不是Reader和Writer,而是Inpu

Linux学习笔记(二十)文件压缩 zip压缩、tar打包、打包、解包

一.zip压缩 首先安装zip与unzipyum install -y zip/unzip zip 1.txt.zip 1.txt 压缩文件1.txt,压缩文件名称为1.txt.zip zip -r 123.zip 123/ 压缩文件夹123/ 指定名称123.zip unzip 1.txt.zip zip压缩文件并不会删除源文件,解压时会提示是否覆盖已存在的文件 unzip 123.zip -d /root/456/ 解压123.zip文件到/root/456/ 目录下 unzip -l 12

Shell命令-文件压缩解压缩之gzip、zip

文件及内容处理 - gzip.zip 1.gzip:gzip压缩工具 gzip命令的功能说明 gzip 命令用于压缩文件.gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出 .gz 的扩展名. gzip命令的语法格式 gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ]gzip [-acdfhlLnNqrtvV][-S <压缩字尾字符串>][-<压缩效率>][--best/fast][文件...] 或 gzip [-

gzip,zip,bzip2,xz,tar文件压缩和归档

gzip [-d#] 文件   其中#为1-9的数字 gzip + 文件  压缩文件,删除源文件 gzip -d + 文件  解压缩文件,删除源文件 压缩等级:1压缩最差,9压缩最好,6为默认 zcat查看.gz的文本文件内容 bzip2 + 文件  压缩文件,删除源文件 bzip2 -d + 文件  解压缩文件,删除源文件 bzcat查看.bz2的文本文件内容 gzip和bzip2都不能压缩目录 zip和unzip zip  + 压缩后文件名.zip + 文件      压缩文件,源文件不会消

使用commons-compress操作zip文件(压缩和解压缩)

http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可以操作ar, cpio, Unix dump, tar, zip, gzip, XZ, Pack200 and bzip2格式的文件,功能比较强大. 在这里写两个用Commons Compress把文件压缩成zip和从zip解压缩的方法. 直接贴上工具类代码: /** * Zip文件工具类 * @a

php 文件压缩zip扩展

<?php function addFileToZip($path, $zip) { $handler = opendir($path); //打开当前文件夹由$path指定. while (($filename = readdir($handler)) !== false) { if ($filename != "." && $filename != "..") {//文件夹文件名字为'.'和'..',不要对他们进行操作 if (is_dir