`
huxiaojun_198213
  • 浏览: 97908 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用Apache Commons Compress进行文件压缩

阅读更多
使用Apache Commons Compress进行文件压缩

package com.app.common.util.zip;

import java.io.*;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;

/**
 * 文件压缩抽象类
 * @author Administrator
 *
 */
public abstract class AbstractZipHandler {

	public static final String ZIP_SUFFIX = ".zip";

	public static final String DEF_DECODING = "GBK";

	private File inputFile;

	private File outFile;

	private FileFilter fileFilter;

	private ZipArchiveOutputStream zipOutput;

	private String encoding;

	public AbstractZipHandler(File inputFile, File outFile) throws IOException {
		if (null == inputFile || !inputFile.exists()|| !inputFile.isDirectory() || !inputFile.canRead()) {
			throw new IllegalArgumentException("The inputFile must be directory and can read.");
		}
		if (false == (outFile.getCanonicalPath().toLowerCase().endsWith(ZIP_SUFFIX))) {
			throw new IllegalArgumentException("The outFile must be zip file.");
		}

		this.inputFile = inputFile;
		this.outFile = outFile;

		zipOutput = new ZipArchiveOutputStream(outFile);
		zipOutput.setEncoding(this.getEncoding());
	}

	public void zip() {
		File[] files = this.getFileFilter() == null ? inputFile.listFiles():inputFile.listFiles(this.getFileFilter());
		try {
			for (File file : files) {
				zipFile(file);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (null != zipOutput) {
				try {
					zipOutput.close();
				} catch (IOException e) {
				}
				zipOutput = null;
			}

		}
	}

	private void zipFile(File file) throws IOException {
		if (file.isDirectory()) {
			zipOutput.putArchiveEntry(new ZipArchiveEntry(this.getEntryName(
					inputFile, file) + "/"));
			zipOutput.closeArchiveEntry();
			for (File f : this.getFileFilter() == null ? file.listFiles()
					: file.listFiles(this.getFileFilter())) {
				zipFile(f);
			}
		} else {
			zipOutput.putArchiveEntry(new ZipArchiveEntry(this.getEntryName(
					inputFile, file)));
			IOUtils.copy(new FileInputStream(file), zipOutput);
			zipOutput.closeArchiveEntry();
		}
	}

	public String getEntryName(File inputFile, File entryFile)
			throws IOException {
		String result = null;
		String inputFileParentPath = inputFile.getParentFile()
				.getCanonicalPath();
		String entryFilePath = entryFile.getCanonicalPath();
		result = entryFilePath.substring(entryFilePath
				.indexOf(inputFileParentPath) + inputFileParentPath.length());
		return result;
	}

	public FileFilter getFileFilter() {
		return fileFilter;
	}

	public void setFileFilter(FileFilter fileFilter) {
		this.fileFilter = fileFilter;
	}

	public String getEncoding() {
		return null == encoding ? DEF_DECODING : encoding;
	}

	public void setEncoding(String encoding) {
		this.encoding = encoding;
	}

}



package com.app.common.util.zip;

import java.io.File;
import java.io.IOException;

/**
 * 文件压缩默认实现类
 * @author Administrator
 *
 */
public class DefZipHandler extends AbstractZipHandler {

	public DefZipHandler(File inputFile, File outFile) throws IOException {
		super(inputFile, outFile);
	}

	
}



package com.app.common.util.zip;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * 文件压缩测试类
 * @author Administrator
 *
 */
public class TestDefZipHandler {

	public static void main(String[] args) throws IOException {

		File inputFile = new File("c:/test/");

		File outFile = new File("c:/test.zip");

		AbstractZipHandler handler = new DefZipHandler(inputFile, outFile);

		handler.setFileFilter(new FileFilter() {
			@Override
			public boolean accept(File f) {
				return true;
			}
		});

		handler.zip();

		System.out.println("finished...");
	}
}

分享到:
评论

相关推荐

    apache commons-compress 之tar压缩文件夹示例

    带有代码的jar。apache commons-compress 之tar压缩文件夹示例 TarArchiveEntry

    apache-common-compress.rar

    apache-common-compress不提供解压RAR文件的方法,压缩包内还有另一个压缩包,那个包就是压缩/解压缩RAR文件用的,需要依赖一个公共包,需要依赖的包在压缩文件的lib文件夹下。此压缩包内含源码、开发包,但是没找到...

    edited: apache commons-compress 之tar压缩文件夹的示例

    又做了一些修改,带有代码的jar。apache commons-compress 之tar压缩文件夹示例 TarArchiveEntry

    Apache Commons Compress ( commons-compress-1.15-bin.zip)

    java用于对文件进行压缩的jar包,可通过该jar包将文件压缩成zip,gzip,7z等压缩格式

    commons-compress包

    apache.commons.compress 第三方开源软件。能解压,压缩文件。里面包括commons-compress-1.9、commons-compress-1.2.1的版本。 当遇到这种错误,应该重点关注Caused by:后面的内容 Caused by:xxx Unsupported major....

    java Zip 文件压缩

    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....

    zip压缩及解压多文件

    zip压缩预解压多文件,提供两种方法:一,用java自带方式java.util.zip;二,应用apache的jar包,org.apache.commons.compress.archivers.zip

    7z解压缩java代码+工具

    该文件为java版的7z解压缩工具,目前已经支持tar,7z,gz等格式的代码解压缩

    Java实现zip的压缩和解压缩操作

    Java标准库的java.util.zip包通常适用于简单的ZIP格式压缩与解压缩,Apache Commons Compress和Java Zip4j提供了更多的压缩格式和功能选项。对于大型数据集和高性能要求的场景,还可以考虑使用专门的压缩工具或算法...

    Jakarta commons docs API CHM 格式

    commons-compress 操作压缩文件的 API commons-configuration 可以从xml、properties、JNDI、JDBC、System properties、Applet parameters和Servlet parameters等读取信息 commons-daemon 可以帮你实现将一个普通...

    Java解压缩文件,尤其对于Rar5.0版本的解压实现.zip

    沙漏哦的gravatar头像 ...apache-commons-compress junrar sevenzipjbinding 依赖包文件(可选) 见源码中pom文件依赖 链接:https://pan.baidu.com/s/1T82k_muUHonQ82Syb_FUHw?pwd=3p1x 提取码:3p1x

    java解压zip或rar压缩文件(源码和jar包)

    java解压zip或rar压缩文件 包括源码和所需要的jar包:apache ant.jar 和 java-unrar-0.3.jar zip文件解压(要使用apache ant.jar以处理中文乱码) rar文件解压(要使用java-unrar-0.3.jar) 具有处理中文乱码功能 代码...

    比较全面的:Jakarta-commons jar包(附: chm参考手册 & 资源简介)

    commons-compress 操作压缩文件的 API commons-configuration 可以从xml、properties、JNDI、JDBC、System properties、Applet parameters和Servlet parameters等读取信息 commons-daemon 可以帮你实现将一个普通...

    zip压缩及解压多文件源码

    源码提供两种压缩及解压方式:一,使用jdk自带类java.util.zip.ZipEntry;二,使用apache提供类org.apache.commons.compress.archivers.zip.ZipArchiveEntry。方式二速度更快

    蒸汽冷凝器

    Apache Commons Compress(用于发送压缩响应的源服务器) Apache Commons Lang 3 Apache Commons HttpClient(用于Web API功能) JSON(用于Web API功能) JUnit(用于测试) PowerMock(用于测试) Maven将...

    compression-utils:简单易用的库来压缩和解压 .tar.gz 格式的文件

    该库是 Apache Commons Compress 库的简单包装器,但它提供了一个更易于使用的面向文件的界面。 安装 无论出于何种目的,您都可以按照您认为合适的方式使用该库。 我不保证这有效,但如果你愿意,你可以。 要使用它...

    sbt-backup:一个 sbt 插件,用于将提供的目录压缩和 scp 到某个远程主机

    这是一个简单的 ,它使用和 [Apache Commons Compress] ( ) 来压缩和 scp 提供的目录到某个远程主机。 该插件为您提供了任务backup ,可以根据需要将其插入到您的构建过程中 它可用于备份测试结果、文档或包装过程...

    GZipper:JavaFX文件存档器和哈希工具。 压缩和解压缩ZIP,JAR,GZIP和TARBALL(GZIP,BZIP2或LZMA)

    拉链 特征 创建并提取以下归档类型: 压缩 罐 Tarball(GZIP) Tarball(BZIP2) 泰伯(LZMA) 泰伯(XZ) 压缩和解压缩GZIP ...对于压缩和解压缩,此应用程序使用Apache Foundation的commons-compres

    seddi:堆栈交换数据转储导入器

    SEDDI是StackExchange数据转储的跨...用即将发布的从Apache Commons Compress中提取的LZMA 7z替代了sevenzipjbining。 Sevenzipjbining太脆弱了,它依赖于本机库,从而导致频繁且无法解释的JVM崩溃( ) 添加对加载自

    java开源包10

    Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO操作,以提升性能。 预输入搜索 Cleo Cleo 是一个灵活的软件库用于处理一些预输入和自动完成的搜索功能,该项目是 LinkedIn 公司...

Global site tag (gtag.js) - Google Analytics