我们经常会使用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对象。
压缩文件:
public class ZipOutputStreamTest { public static void main(String args[]) throws IOException { test1(); test2(); } private 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(); } private static void test2() throws IOException { File inFile = new File("D:\\test1"); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("D:\\test1.zip"), Charset.forName("GBK")); zos.setComment("多文件处理"); zipFile(inFile, zos, null); zos.close(); } /** * 压缩文件 * @param inFile 需要进行压缩的文件 * @param zos 需要压缩到的压缩文件对应的输出流 * @param dir 需要把文件压缩到的压缩文件里面的相对路径 * @throws IOException */ private static void zipFile(File inFile, ZipOutputStream zos, String dir) throws IOException { String entryName = null;//带相对路径的 if (dir != null) {//传递进来的dir已经是已文件路径分隔符结尾的了 entryName = dir + inFile.getName(); } else { entryName = inFile.getName(); } if (inFile.isDirectory()) { entryName += File.separator;//写目录的时候要以文件分隔符结尾 } ZipEntry entry = new ZipEntry(entryName); zos.putNextEntry(entry); if (inFile.isDirectory()) { File[] files = inFile.listFiles(); for (File file : files) zipFile(file, zos, entryName); } else { 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.Enumeration; 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, Charset.forName("GBK"));//实例化ZipFile,并指定其编码格式,防止中文乱码和解压错误,每一个zip压缩文件都可以表示为一个ZipFile //实例化一个Zip压缩文件的ZipInputStream对象,可以利用该类的getNextEntry()方法依次拿到每一个ZipEntry对象 ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file), Charset.forName("GBK")); //直接利用ZipFile进行解压 unpack(zipFile); //利用ZipFile和ZipInputStream进行解压 unpack(zipFile, zipInputStream); } /** * 该方法是通过ZipFile和ZipInputStream共同来解压文件的,通过ZipInputStream可以拿到ZipFile中的每一个 * ZipEntry对象,然后通过ZipFile的getInputStream(ZipEntry zipEntry)方法拿到对应的每一个ZipEntry的 * 输入流,从而实现文件的解压 * @param zipFile * @param zipInputStream * @throws IOException */ public static void unpack(ZipFile zipFile, ZipInputStream zipInputStream) throws IOException { 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(); if (!zipEntry.isDirectory()) {//非目录 OutputStream os = new FileOutputStream(temp); //通过ZipFile的getInputStream方法拿到具体的ZipEntry的输入流 InputStream is = zipFile.getInputStream(zipEntry); int len = 0; System.out.println(zipEntry.getName()); while ((len = is.read()) != -1) os.write(len); os.close(); is.close(); } } zipInputStream.close(); } /** * 该方法是直接通过ZipFile的entries()方法拿到包含所有的ZipEntry对象的Enumeration对象, * 接下来的操作和上面的是一样的 * @param zipFile * @throws IOException */ public static void unpack(ZipFile zipFile) throws IOException { Enumeration<? extends ZipEntry> entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry zipEntry = entries.nextElement(); String fileName = zipEntry.getName(); File temp = new File("D:\\unpackTest2\\" + fileName); if (! temp.getParentFile().exists()) temp.getParentFile().mkdirs(); if (!zipEntry.isDirectory()) {//非目录才进行写入 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(); } } } }
相关推荐
以上代码展示了Java中压缩和解压缩ZIP、JAR、GZIP文件的基本方法。在实际应用中,可能需要根据具体需求进行调整,如处理异常、优化性能或增加更多的功能,如加密、校验等。同时,确保正确关闭流以避免资源泄漏。
本实践主要关注如何使用Java来处理ZIP格式的压缩文件,以下将详细介绍相关知识点。 1. **Java档案API(Java Archive API, JAR)** Java标准库提供了一个强大的API来处理各种类型的档案文件,包括ZIP格式。`java....
除了 ZIP 文件格式之外,`java.util.zip` 包还支持 GZIP 压缩。GZIP 是一种广泛使用的文件格式,通常用于单个文件的压缩。 ##### GZIP 压缩 使用 `GZIPOutputStream` 可以将文件压缩为 GZIP 格式: ```java ...
压缩API:Java提供了java.util.zip和java.util.jar包来实现文件的压缩和解压缩操作。 压缩算法:通过选择不同的压缩算法,如DEFLATE算法用于ZIP格式,实现对文件的压缩。 流操作:使用Java的输入输出流(InputStream...
在Java编程环境中,处理压缩文件和网络传输是常见的任务,特别是在开发企业级应用程序时。本文将详细介绍标题和描述中提到的几个关键知识点:Java中的zip、rar(包括处理带密码的RAR文件)、gz压缩,以及FTP工具类的...
Java标准库提供了`java.util.zip.GZIPOutputStream`和`java.util.zip.GZIPInputStream`用于GZIP格式的压缩和解压缩。GZIP是一种广泛使用的压缩格式,它基于DEFLATE算法。通过这两个类,我们可以轻松地将文件或数据...
本资源包“文件GZip压缩AES加密反向解密解压缩代码和jar”提供了完整的Java实现,使得开发者能够方便地对文件进行GZip压缩、AES加密,以及后续的解密和解压缩操作。下面将详细解释这些技术及其应用。 首先,GZip...
首先,Java标准库提供了`java.util.zip`包,它包含了一系列类用于处理ZIP和GZIP格式的压缩文件。例如,`ZipOutputStream`和`ZipInputStream`用于创建和读取ZIP文件,而`GZIPOutputStream`和`GZIPInputStream`则用于...
commons-compress-1.18.jar是一个Java压缩库,专注于数据的压缩和解压缩功能,支持多种常见的压缩格式。它提供了广泛的压缩算法和工具,用于数据存储、传输和优化存储空间。 【使用人群】 适用于Java开发者、数据...
此外,7-Zip 还提供了AES-256加密功能,确保了压缩文件的安全性,对于需要保密的文件提供了额外的保护。 7-Zip 的界面简洁直观,无论是命令行版本还是图形用户界面(GUI),操作都非常简单。在 GUI 版本中,用户...
gzip 命令用于压缩文件,生成的文件后缀名为 .gz。gunzip 命令用于解压缩.gz 文件。 示例: ``` [root@localhost tmp]# gzip 文件名 [root@localhost tmp]# gunzip 文件名.gz ``` 二、tar 命令 tar 命令用于将...
压缩和解压缩GZIP 压缩水平可以调节如果有压缩机支持 支持正则表达式允许过滤文件/条目 支持深色主题(CSS样式) 消息摘要算法: MD5 SHA-1 SHA-256 SHA-384 SHA-512 支持的语言: 英语 德语 兼容性 该...
这个库提供了多种类和接口,如`ZipOutputStream`用于创建ZIP格式的压缩文件,`GZIPOutputStream`用于创建GZIP格式的压缩文件。例如,如果你想把一个名为`example.txt`的文件压缩成ZIP格式,你可以创建一个`...
例如,`ZipOutputStream`和`ZipInputStream`可以用于创建和读取ZIP格式的压缩文件,而`GZIPOutputStream`和`GZIPInputStream`则对应于GZIP格式的压缩。 **RSA加密** RSA(Rivest-Shamir-Adleman)是一种非对称加密...
首先,Java标准库提供了`java.util.zip`包,它包含了多种压缩和解压缩的类,如`ZipOutputStream`用于创建ZIP格式的压缩文件,`GZIPOutputStream`用于创建GZIP格式的压缩文件,以及`InflaterInputStream`和`...
在给定的压缩包中,`Jar.java`可能是一个实现了对JAR(Java Archive)文件进行压缩和解压缩的类,因为JAR本质上也是一种ZIP格式的文件。 `JarTool.java`可能是与`Jar.java`配套使用的命令行工具,允许用户通过...
"truezip6.6"是一个专门针对这些问题的Java库,它为开发者提供了强大的文件系统接口,使得在Java中操作压缩文件变得更加便捷和可靠。 TrueZip库的核心功能在于提供了一个与Java标准文件系统API兼容的接口,这意味着...
1. "lz4-java-1.6.0.jar":这是LZ4库的核心运行时文件,包含了实现LZ4压缩和解压缩功能的Java类和方法。开发人员在他们的Java项目中可以引用这个JAR文件,以便在代码中使用LZ4压缩和解压缩数据。 2. "lz4-java-...
除了以上提到的,Java还提供了`java.util.zip`包,它包含了一些基本的压缩和解压缩功能,如`ZipOutputStream`和`ZipInputStream`用于处理ZIP格式,`GZIPOutputStream`和`GZIPInputStream`用于处理GZIP格式。...