在java.util.zip包中,定义了多种类型用于创建和读取zip压缩格式的文件,主要有ZipEntry,ZipInputStream,ZipOutputStream三个类。
java包中还有一个ZipFile类,利用它可以从压缩格式文件中读取原始文件的入口,即在解压缩zip文件时会用到
package zip;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
//zip是windows平台下常用的压缩文件,gzip是unix平台下常用的
public class ZipSample {
private final int BUFFER_SIZE = 1024;
public static void main(String[] args) {
File zip = new File("c:\\test.zip");
File[] files = new File[3];
files[0] = new File("D:\\holen.xml");
files[1] = new File("D:\\holen2.xml");
files[2] = new File("D:\\downloads\\XPath.chm");
ZipSample sample = new ZipSample();
sample.zip(zip, files); // 将files打包至zip文件
File zipFile = new File("c:\\test.zip");
sample.readZipFile(zipFile); // 读取zip文件
}
public void zip(File zipFile, File[] zippedFiles) { // 将zippedFiles打包到zipFile的zip文件即压缩文件
try {
byte[] buffer = new byte[BUFFER_SIZE];
FileOutputStream fs = new FileOutputStream(zipFile);
ZipOutputStream zo = new ZipOutputStream(fs);
for (int i = 0; i < zippedFiles.length; i++) {
if (zippedFiles[i] == null || !zippedFiles[i].exists()
|| zippedFiles[i].isDirectory())
continue;
// 添加每个原始文件的入口
ZipEntry zipAdd = new ZipEntry(zippedFiles[i].getName());// zipEntry标示压缩文件中每一个原始文件的入口,具有唯一的名称
zipAdd.setTime(zippedFiles[i].lastModified());
zo.putNextEntry(zipAdd);
FileInputStream in = new FileInputStream(zippedFiles[i]);
while (true) {
int nRead = in.read(buffer, 0, buffer.length); // 读取的字节数
if (nRead <= 0) {
break;
}
zo.write(buffer, 0, nRead);
}
in.close();
}
zo.close();
fs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void readZipFile(File file) { // 解压缩,用ZipFile类
try {
// 获取压缩文件中每一个原始文件的入口
ZipFile zf = new ZipFile(file);
Enumeration entries = zf.entries();
// 从控制台获取用户输入
BufferedReader input = new BufferedReader(new InputStreamReader(
System.in));
while (entries.hasMoreElements()) {
ZipEntry ze = (ZipEntry) entries.nextElement();
System.out.println("Read " + ze.getName() + "?");
String inputLine = input.readLine();
if (inputLine.equalsIgnoreCase("y")) {
long size = ze.getSize();
if (size > 0) {
// 解压输出指定的原始文件
BufferedReader br = new BufferedReader(
new InputStreamReader(zf.getInputStream(ze)));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
} // if "y"
}// while
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
该程序执行后会在c盘下生产出一个test.zip文件
分享到:
相关推荐
总之,Java-unrar-0.3是一个实用的工具,让Java开发者能够轻松地在各种平台上处理RAR文件,而无需依赖于特定操作系统的压缩工具。这个库简化了文件解压的过程,并且易于集成到现有的Java项目中,对于那些需要处理RAR...
Apache Commons FileUpload与Apache Commons IO是Java开发中处理文件上传的两个重要库,它们在Web应用中被广泛使用。这两个库分别提供了不同的功能,但在处理文件上传时常常一起使用。 `commons-fileupload-1.2.1....
1. **RAR文件解析**:`java-unrar`库能够解析RAR文件头信息,获取文件名、压缩和未压缩大小、时间戳等元数据。 2. **文件提取**:你可以通过库提供的API指定RAR文件中的某个文件或目录进行提取,并保存到本地文件...
总的来说,这个场景涉及到Java编程中的文件操作、压缩文件解压、加密算法应用等多个知识点。通过`java-unrar-decryption-supported-20120613.jar`和`gnu-crypto.jar`,我们可以编写Java程序,高效地处理RAR文件,...
// 设置压缩文件入口entry,为被读取的文件创建压缩条目 File tempFile = new File(fileArray[i].toString()); String rootStr = file.getPath(); String entryStr = null; // entry以相对路径的...
在Java中,IO操作涉及到文件、字节流、字符流以及管道流等多个概念。下面将详细解释这些知识点。 首先,我们来看“文件类”。在Java中,`java.io.File`类用于表示文件和目录路径名的抽象表示。它提供了创建、删除、...
Apache Commons IO 是一个Java库,专门用于处理输入/输出(I/O)操作。这个库提供了大量的工具类,扩展了Java标准库中关于I/O的功能,使得开发者在处理文件、流、字符转换、过滤器和读写操作时更加方便。在这个...
Apache Commons IO 是一个 Java 类库,专门处理输入/输出流操作,提供了一系列实用工具类,极大地简化了 Java I/O 操作。在这个主题中,我们将深入探讨 `commons-io-1.3.2-sources.jar` 中的核心概念和功能。 首先...
本文将详细介绍一个Java程序中的功能模块——如何实现目录多文件上传,并利用Java IO流进行文件复制操作。该功能可以实现在用户选择一个目录后,自动扫描并上传该目录下的所有文件及其子文件夹,最终达到完整备份或...
Apache Commons IO 是一个Java库,专门用于处理输入/输出(I/O)操作。这个库提供了大量的实用工具类,简化了常见的文件、流、过滤器、读写操作等任务。"commons-io-2.11.0.rar"是Apache Commons IO库的版本2.11.0的...
例如,javaio.bmp和javaio2.bmp可能是两张展示IO框架图的图片,其中详细描绘了不同类之间的继承关系和使用场景,帮助开发者更好地理解和掌握Java IO系统。 总结一下,Java IO框架是Java平台不可或缺的一部分,它为...
总的来说,Java的IO流体系结构复杂而强大,它提供了多种工具和策略来处理各种数据传输场景,包括文件操作、网络通信、对象序列化等。理解并熟练运用这些流可以帮助我们构建高效、可靠的Java应用程序。
标题中的"commons-io-2.5-src"和"commons-fileupload-1.3.1-bin"是两个在Java开发中常用的开源库,分别用于处理I/O操作和文件上传功能。 `commons-io-2.5-src`是Apache Commons IO库的源代码版本,它是一个Java实用...
Java IO提供了丰富的类库,使得开发者能够处理各种类型的输入输出任务,包括文件操作、网络通信、流处理等。在这个“Java io的基本操作很全面的代码”项目中,我们可以看到一系列针对Java IO的实例,对于学习和理解...
《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...
Zip文件格式是一种广泛使用的压缩格式,它允许将多个文件打包成一个单一的压缩文件。在Java中,我们可以使用java.util.zip包中的ZipOutputStream和ZipInputStream类来对Zip文件进行压缩和解压缩操作。 **压缩Zip...
在Java中,IO操作涉及到文件读写、网络通信、数据流管理等多个方面,是程序与外部世界交互的关键技术。本教程将通过视频形式,帮助你深入理解和掌握Java IO系统。 Java IO体系结构由多个类和接口组成,这些类和接口...
Java IO API提供了一套丰富的类和接口,使得开发者可以方便地进行文件读写、网络通信、流处理等操作。 1. **基本概念** - 流(Stream):Java IO中的核心概念,代表数据的源或目标。流可以是字节流或字符流,分为...
5. **文件操作**:在Java中,文件操作涉及`java.io`包,如`File`类用于文件的创建、删除和基本信息获取,而`BufferedInputStream`和`BufferedOutputStream`用于提高文件读写效率。 6. **流的概念**:在Java中,I/O...
### Java将文件压缩为ZIP的方法 #### 知识点概览 本文主要介绍如何使用Java实现文件的ZIP压缩功能,并提供了完整的代码示例。通过学习本文,你可以掌握以下几个知识点: 1. 使用`java.util.zip`包中的类进行文件...