`
jxdiamond
  • 浏览: 104470 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java压缩与解压缩zip、rar、Gzip文件

    博客分类:
  • java
 
阅读更多
我们经常会使用WinZIP等压缩软件将文件进行压缩以方便传输。在java里面也提供了将文件进行压缩以减少传输时的数据量的类,可以很方便的将文件压缩成ZIP、JAR、GZIP等形式,GZIP主要是在Linux系统下的压缩文件。

下面主要讲的就是ZIP形式的压缩文件,而JAR、GZIP形式的压缩文件也是类似的用法。

ZIP是一种很常见的压缩形式,在java中要实现ZIP的压缩主要用到的是java.util.zip这个包里面的类。主要有ZipFile、 ZipOutputStream、ZipInputStream和ZipEntry。ZipOutputStream是用来压缩文件 的,ZipInputStream和ZipFile是用来解压缩文件的,在压缩和解压缩的过程中,ZipEntry都会用到。在java的Zip压缩文件 中,每一个子文件都是一个ZipEntry对象。
压缩文件代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipOutputStreamTest {

	public static void main(String args[]) throws IOException {
		test1();
		test2();
	}
	
	public static void test1() throws IOException {
		ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\testZip.zip"), Charset.forName("GBK"));
		//实例化一个名称为ab.txt的ZipEntry对象
		ZipEntry entry = new ZipEntry("ab.txt");
		//设置注释
		zos.setComment("zip测试for单个文件");
		//把生成的ZipEntry对象加入到压缩文件中,而之后往压缩文件中写入的内容都会放在这个ZipEntry对象里面
		zos.putNextEntry(entry);
		InputStream is = new FileInputStream("D:\\ab.txt");
		int len = 0;
		while ((len = is.read()) != -1)
			zos.write(len);
		is.close();
		zos.close();
	}
	
	public static void test2() throws IOException {
		File inFile = new File("D:\\test");
		ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\test.zip"), Charset.forName("GBK"));
		zos.setComment("多文件处理");
		zipFile(inFile, zos, "");
		zos.close();
	}
	
	public static void zipFile(File inFile, ZipOutputStream zos, String dir) throws IOException {
		if (inFile.isDirectory()) {
			File[] files = inFile.listFiles();
			for (File file:files)
				zipFile(file, zos, dir + "\\" + inFile.getName());
		} else {
			String entryName = null;
			if (!"".equals(dir))
				entryName = dir + "\\" + inFile.getName();
			else
				entryName = inFile.getName();
			ZipEntry entry = new ZipEntry(entryName);
			zos.putNextEntry(entry);
			InputStream is = new FileInputStream(inFile);
			int len = 0;
			while ((len = is.read()) != -1)
				zos.write(len);
			is.close();
		}

	}
	
}

解压缩代码如下:
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 java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class ZipInputStreamTest {

	public static void main(String args[]) throws IOException {
		File file = new File("D:\\test.zip");//压缩文件
		ZipFile zipFile = new ZipFile(file);//实例化ZipFile,每一个zip压缩文件都可以表示为一个ZipFile
		//实例化一个Zip压缩文件的ZipInputStream对象,可以利用该类的getNextEntry()方法依次拿到每一个ZipEntry对象
		ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file), Charset.forName("GBK"));
		ZipEntry zipEntry = null;
		while ((zipEntry = zipInputStream.getNextEntry()) != null) {
			String fileName = zipEntry.getName();
			File temp = new File("D:\\unpackTest\\" + fileName);
			if (! temp.getParentFile().exists())
				temp.getParentFile().mkdirs();
			OutputStream os = new FileOutputStream(temp);
			//通过ZipFile的getInputStream方法拿到具体的ZipEntry的输入流
			InputStream is = zipFile.getInputStream(zipEntry);
			int len = 0;
			while ((len = is.read()) != -1)
				os.write(len);
			os.close();
			is.close();
		}
		zipInputStream.close();
	}
	
}

分享到:
评论

相关推荐

    java zip rar(区分有无密码的RAR文件) gz ftp工具类

    1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件的功能。`ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压。你可以通过遍历文件或目录,创建`ZipEntry`对象并...

    JAVA文件压缩与解压缩实践的实现.rar

    Java文件压缩与解压缩实践是指利用Java编程语言实现对文件或文件夹进行压缩和解压缩操作。以下是该实践的描述: 技术概述: Java文件压缩与解压缩是指将一个或多个文件或文件夹打包成一个压缩文件,或者将压缩文件...

    JAVA文件压缩与解压缩实践(源代码+论文).rar

    Java文件压缩与解压缩是Java开发中常见的操作,特别是在数据传输、存储优化和备份场景下。本实践项目提供了源代码和相关论文,帮助开发者深入理解这一主题。在Java中,我们可以利用内置的`java.util.zip`包来实现...

    JAVA文件压缩与解压缩实践.zip

    本实践主要涉及了Java中如何使用标准库`java.util.zip`来实现文件或目录的压缩与解压缩操作。以下是相关的知识点详解: 1. **Java.util.zip包**:Java的标准库提供了`java.util.zip`包,它包含了处理各种ZIP格式的...

    java源码:文件压缩解压缩包 Commons Compress.rar

    在 Java 开发中,如果需要处理 ZIP、GZIP、BZIP2、7z、ARJ、TAR、CPIO、RAR 等多种压缩格式,Apache Commons Compress 库是一个非常实用的选择。 Apache Commons Compress 库的核心优势在于其模块化的架构,每个...

    JAVA文件压缩与解压缩实践(源代码+论文).zip

    Java提供了丰富的类库支持文件的压缩与解压缩,例如java.util.zip包中的类,使得开发者能够方便地实现相关功能。 Java文件压缩与解压缩的实践包含了理论知识和实际操作两个方面。在理论知识方面,开发者需要掌握...

    文件压缩解压缩

    - **解压缩**:同样,解压缩可能依赖于特定库来解析zip、rar或tar头部信息,然后按顺序读取并写入原始文件。在解压rar时,可能需要处理恢复记录,确保数据完整性。 - **错误处理和验证**:工具类应该包含了错误处理...

    JAVA文件压缩与解压缩实践(源代码+LW).rar

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在处理大量数据或者进行网络传输时。本资源提供了“JAVA文件压缩与解压缩实践(源代码+LW)”的实例,其中包含了源代码和相关的论文资料,旨在帮助...

    Java用GZIP压缩解压文件.rar

    在这个例子中,`compressFile()`方法用于压缩源文件,`decompressFile()`方法用于解压缩GZIP文件。两个方法都遵循了上述的压缩和解压缩步骤。 需要注意的是,虽然GZIP是一种常见的压缩格式,但它并不适用于大文件...

    JAVA文件压缩与解压缩实践的设计与实现(源代码+毕设文档).zip

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理任务,这通常涉及到使用库如Apache Commons Compress、Zstd Java Library或者Java内置的ZipOutputStream和ZipInputStream类。本项目"JAVA文件压缩与解压缩实践...

    Java 开发JAVA文件压缩与解压缩实践(源代码+论文).rar

    本资源提供了关于Java实现文件压缩与解压缩的源代码和相关论文,旨在帮助开发者深入理解并掌握这一技能。 Java中实现文件压缩通常会用到标准库中的`java.util.zip`包,这个包提供了各种压缩和解压缩的功能。例如,...

    毕业答辩-JAVA文件压缩与解压缩实践(源代码论文).rar

    Java文件压缩与解压缩是计算机科学中的一个常见任务,尤其在数据存储、传输和备份等领域。本实践项目涉及到了使用Java编程语言实现文件的压缩和解压缩功能,这对于理解和掌握文件处理技术至关重要。在此,我们将深入...

Global site tag (gtag.js) - Google Analytics