`
rensanning
  • 浏览: 3558940 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38337
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:608165
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:683362
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89977
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402544
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69870
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:92037
社区版块
存档分类
最新评论

Java压缩解压ZIP之Zip4j

    博客分类:
  • Java
 
阅读更多
Zip4j是一个Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件。默认采用UTF-8编码,所以支持中文,同时也支持密码,而且支持多种压缩算法。Zt-ZIP也不错,有兴趣的可以试试。

版本:zip4j_1.3.1.jar

http://www.lingala.net/zip4j/(需FQ)

压缩

1、文件压缩
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test1.zip");

ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
filesToAdd.add(new File("c:\\ZipTest\\文件.doc"));
filesToAdd.add(new File("c:\\ZipTest\\파일.xls"));
filesToAdd.add(new File("c:\\ZipTest\\ファイル.ppt"));

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 

zipFile.addFiles(filesToAdd, parameters);	


2、设置密码
--标准
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test2.zip");

ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
filesToAdd.add(new File("c:\\ZipTest\\文件.doc"));
filesToAdd.add(new File("c:\\ZipTest\\파일.xls"));
filesToAdd.add(new File("c:\\ZipTest\\ファイル.ppt"));

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 

// Set password
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);	
parameters.setPassword("test123!");

zipFile.addFiles(filesToAdd, parameters);


--AES
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test3.zip");

ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
filesToAdd.add(new File("c:\\ZipTest\\文件.doc"));
filesToAdd.add(new File("c:\\ZipTest\\파일.xls"));
filesToAdd.add(new File("c:\\ZipTest\\ファイル.ppt"));

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 

// Set password
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword("test123!");

zipFile.addFiles(filesToAdd, parameters);


3、文件夹压缩
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test4.zip");

String folderToAdd = "c:\\ZipTest";

ZipParameters parameters = new ZipParameters();		
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);		
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

zipFile.addFolder(folderToAdd, parameters);


4、将文件压缩到指定文件夹中
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test5.zip");

ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
filesToAdd.add(new File("c:\\ZipTest\\文件.doc"));
filesToAdd.add(new File("c:\\ZipTest\\파일.xls"));
filesToAdd.add(new File("c:\\ZipTest\\ファイル.ppt"));

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

parameters.setRootFolderInZip("test2/");

zipFile.addFiles(filesToAdd, parameters);


5、往ZIP中添加文件
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test1.zip");

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setFileNameInZip("文件2.doc");
parameters.setSourceExternalStream(true);

InputStream is = new FileInputStream("c:\\ZipTest\\文件2.doc");

zipFile.addStream(is, parameters);

is.close();


6、分割压缩文件
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test7.zip");

ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
filesToAdd.add(new File("c:\\ZipTest\\文件.doc"));
filesToAdd.add(new File("c:\\ZipTest\\파일.xls"));
filesToAdd.add(new File("c:\\ZipTest\\ファイル.ppt"));

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 

// SplitLenth has to be greater than 65536 bytes
// zipFile.createZipFileFromFolder()
zipFile.createZipFile(filesToAdd, parameters, true, 65536);


7、创建ZIP流
ArrayList filesToAdd = new ArrayList();
filesToAdd.add(new File("c:\\ZipTest\\sample.txt"));
filesToAdd.add(new File("c:\\ZipTest\\文件.doc"));
filesToAdd.add(new File("c:\\ZipTest\\파일.xls"));
filesToAdd.add(new File("c:\\ZipTest\\ファイル.ppt"));

ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(new File("c:\\ZipTest\\test8.zip")));

ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);

// Set password
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword("test123!");

for (int i = 0; i < filesToAdd.size(); i++) {
	File file = (File)filesToAdd.get(i);
	outputStream.putNextEntry(file,parameters);
	
	if (file.isDirectory()) {
		outputStream.closeEntry();
		continue;
	}
	
	InputStream  inputStream = new FileInputStream(file);
	byte[] readBuff = new byte[4096];
	int readLen = -1;
	while ((readLen = inputStream.read(readBuff)) != -1) {
		outputStream.write(readBuff, 0, readLen);
	}
	
	outputStream.closeEntry();
	
	inputStream.close();
}

outputStream.finish();

outputStream.close();


8、从ZIP中删除文件
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test1.zip");

//删除指定文件
zipFile.removeFile("sample.txt");

//删除第一个文件
if (zipFile.getFileHeaders() != null && zipFile.getFileHeaders().size() > 0) {
	zipFile.removeFile((FileHeader)zipFile.getFileHeaders().get(0));
} else {
	System.out.println("This cannot be demonstrated as zip file does not have any files left");
}


9、获取ZIP中文件一览
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test5.zip");

List fileHeaderList = zipFile.getFileHeaders();

for (int i = 0; i < fileHeaderList.size(); i++) {
	FileHeader fileHeader = (FileHeader)fileHeaderList.get(i);
	System.out.println("****File Details for: " + fileHeader.getFileName() + "*****");
	System.out.println("Name: " + fileHeader.getFileName());
	System.out.println("Compressed Size: " + fileHeader.getCompressedSize());
	System.out.println("Uncompressed Size: " + fileHeader.getUncompressedSize());
	System.out.println("CRC: " + fileHeader.getCrc32());
	System.out.println("************************************************************");
}


解压

1、解压所有文件
//方法一
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test1.zip");		
zipFile.extractAll("c:\\ZipTest1");

//方法二
ZipFile zipFile2 = new ZipFile("c:\\ZipTest\\test2.zip");		
if (zipFile2.isEncrypted()) {
	zipFile2.setPassword("test123!");
}
List fileHeaderList = zipFile2.getFileHeaders();
for (int i = 0; i < fileHeaderList.size(); i++) {
	FileHeader fileHeader = (FileHeader)fileHeaderList.get(i);
	zipFile2.extractFile(fileHeader, "c:\\ZipTest2\\");
}


2、解压所有文件到流
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test2.zip");		
if (zipFile.isEncrypted()) {
	zipFile.setPassword("test123!");
}

List fileHeaderList = zipFile.getFileHeaders();

for (int i = 0; i < fileHeaderList.size(); i++) {
	FileHeader fileHeader = (FileHeader)fileHeaderList.get(i);
	if (fileHeader != null) {
		
		String outFilePath = "c:\\ZipTest3\\" + System.getProperty("file.separator") + fileHeader.getFileName();
		File outFile = new File(outFilePath);
		
		if (fileHeader.isDirectory()) {
			outFile.mkdirs();
			continue;
		}
		
		File parentDir = outFile.getParentFile();
		if (!parentDir.exists()) {
			parentDir.mkdirs();
		}
		
		ZipInputStream is = zipFile.getInputStream(fileHeader);
		OutputStream os = new FileOutputStream(outFile);
		
		int readLen = -1;
		byte[] buff = new byte[4096];
		
		while ((readLen = is.read(buff)) != -1) {
			os.write(buff, 0, readLen);
		}
		
		os.close();
		os = null;
		is.close();
		is = null;
		
		UnzipUtil.applyFileAttributes(fileHeader, outFile);
		
		System.out.println("Done extracting: " + fileHeader.getFileName());
	} else {
		System.err.println("fileheader is null. Shouldn't be here");
	}
}


3、解压单个文件
ZipFile zipFile = new ZipFile("c:\\ZipTest\\test2.zip");
if (zipFile.isEncrypted()) {
	zipFile.setPassword("test123!");
}

zipFile.extractFile("文件.doc", "c:\\ZipTest4\\");
分享到:
评论
10 楼 look_at_you 2016-05-06  
读取文件时,按行读取,每一行的第一个字符都取不到
9 楼 funly1234 2016-04-05  
楼主,这个不能把单个文件导出成流,非要遍历获取到文件头才可以吗?
8 楼 山川尽美 2015-06-11  
rensanning 写道
@山川尽美
使用 parameters.setRootFolderInZip("test2/"); 来设置你要添加到的文件夹。

谢谢啦  看了看例子 实现了
7 楼 rensanning 2015-06-11  
@山川尽美
使用 parameters.setRootFolderInZip("test2/"); 来设置你要添加到的文件夹。
6 楼 山川尽美 2015-06-10  
往ZIP中添加文件
楼主 这个是添加到压缩文件目录下,我想添加到压缩目录的某个文件夹下怎么弄啊?
不会再压缩文件下创建文件夹。
求解答 谢谢啦!
5 楼 xianlaioy 2014-07-21  
中文文件用zip4j压缩,WinRAR解压的时候乱码。
4 楼 dzh535006103 2014-04-02  
       
3 楼 dzh535006103 2014-04-02  
    ops          
2 楼 SE_XiaoFeng 2013-07-19  
这个好玩.  我就喜欢java里各种各样的功能.
1 楼 永恒的GG 2013-04-07  
谢谢分享!!!!!

相关推荐

    java压缩解压ZIP

    java压缩解压ZIP

    java将文件夹压缩成zip,解压zip压缩包

    在Java编程环境中,处理文件的压缩与解压是常见的任务,尤其在数据传输或存储时。本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO...

    用Java压缩解压ZIP文件

    用Java压缩解压ZIP文件,将利用java.util.zip 包中提供的类来实现压缩和解压zip 格式文件的功能。当然,本例在功能上完全没有Winzip 等成熟的压缩软件那么强,也不能做的很强,本例仅仅是演示如何来使用java.util....

    java解压zip压缩文件

    在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...

    java 操作Zip文件(压缩、解压、加密).zip

    1. **zip4j库**:`zip4j-1.3.2.jar`是一个用Java编写的库,它提供了方便的API来处理Zip文件。以下是一些关键功能: - **压缩文件和目录**:你可以通过创建一个`ZipFile`对象,并调用`addFiles()`或`addFolder()`...

    Java实现的带密码压缩与解压zip文件源码

    `ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压ZIP文件。为了添加密码保护,我们需要在创建`ZipOutputStream`时设置一个密码。 1. **密码保护**:在压缩过程中,可以使用`ZipEntry`对象来...

    JAVA解压ZIP格式的压缩包_java解压缩_zip_

    本文将深入探讨如何使用Java来解压ZIP格式的压缩包,并提供相关的源码参考。 首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理压缩文件的基本工具。在ZIP格式的压缩包处理中,我们主要会用到`...

    JAVA解压ZIP多层目录文件(需ant.jar

    ### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....

    java实现的解压与压缩 zip和rar类型的

    本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...

    Java实现Zip的压缩和解压

    NULL 博文链接:https://zhenyong.iteye.com/blog/1576148

    java 中 zip压缩文件解压工具类

    本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示...

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    java Zip压缩解压

    总结来说,"java Zip压缩解压"涉及了Java标准库中的`java.util.zip`包,用于创建和读取ZIP文件;Apache Ant作为构建工具,可能用于自动化压缩和解压过程;而JUnit则用于编写和运行测试,确保代码的正确实现。在实际...

    java压缩文件生成带密码的zip包,解压带密码的zip包的工具类

    压缩文件方法 该方法需要引用zip4j的jar文件 单个文件、多个文件压缩 /** * 使用给定密码压缩指定文件或文件夹到指定位置. * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者""....

    zip4j-java加密压缩

    《使用zip4j进行Java加密压缩与解压详解》 在Java编程中,处理文件的压缩和解压是一项常见的任务,而zip4j库提供了一种便捷的方式,它支持文件和文件夹的加密压缩以及解压操作。zip4j不仅简单易用,还提供了强大的...

    用java.util.zip包现数据压缩与解压

    ### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....

    java zip压缩解压工具解决中文乱码问题

    而解压ZIP文件,可以使用`unzip()`方法: ```java File sourceZip = new File("input.zip"); File destinationDir = new File("destination"); ZipUtils.unzip(sourceZip, destinationDir); ``` 以上代码片段展示...

    Java压缩和解压缩zip文件

    `ZipOutputStream` 用于创建ZIP文件,而 `ZipInputStream` 则用于读取和解压ZIP文件。以下是一个简单的压缩示例: ```java import java.io.*; import java.util.zip.*; public class ZipUtil { public static ...

    使用 Java 实现的压缩/解压 ZIP 文件的工具类

    以上代码示例展示了如何使用Java的`java.util.zip`包创建和解压ZIP文件。这些工具类可以作为通用的ZIP操作函数库,适用于各种项目需求。注意,实际应用中可能需要添加错误处理和日志记录以增强健壮性。同时,对于大...

Global site tag (gtag.js) - Google Analytics