Java对Zip格式类库支持得比较全面,得用它可以把多个文件压缩成一个压缩包。这个类库使用的是标准Zip格式,所以能与很多的压缩工具兼容。
ZipOutputStream类有设置压缩方法以及在压缩方式下使用的压缩级别,zipOutputStream.setMethod(int method)设置用于条目的默认压缩方法。只要没有为单个 ZIP 文件条目指定压缩方法,就使用ZipOutputStream所设置的压缩方法来存储,默认值为 ZipOutputStream.DEFLATED(表示进行压缩存储),还可以设置成STORED(表示仅打包归档存储)。ZipOutputStream在设置了压缩方法为DEFLATED后,我们还可以进一步使用setLevel(int level)方法来设置压缩级别,压缩级别值为0-9共10个级别(值越大,表示压缩越利害),默认为Deflater.DEFAULT_COMPRESSION=-1。当然我们也可以通过条目ZipEntry的setMethod方法为单个条件设置压缩方法。
类ZipEntry描述了存储在ZIP文件中的压缩文件。类中包含有多种方法可以用来设置和获得ZIP条目的信息。类ZipEntry是被ZipFile[zipFile.getInputStream(ZipEntry entry)]和ZipInputStream使用来读取ZIP文件,ZipOutputStream来写入ZIP文件的。有以下这些有用的方法:getName()返回条目名称、isDirectory()如果为目录条目,则返回 true(目录条目定义为其名称以 '/' 结尾的条目)、setMethod(int method) 设置条目的压缩方法,可以为 ZipOutputStream.STORED 或 ZipOutputStream .DEFLATED。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.Enumeration;
import java.util.zip.Adler32;
import java.util.zip.CheckedInputStream;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**
*
* 用Zip保存多个文件.
*
*/
public class ZipCompress {
private static final String FILE = "d:\\test.zip";
public static void main(String[] args) throws Exception {
//建立一个文件输出流
FileOutputStream file = new FileOutputStream(FILE);
//建立一个CheckSum输出流,Adler32 CheckSum类型校验和
CheckedOutputStream csum = new CheckedOutputStream(file, new Adler32());
//zip输出流
ZipOutputStream zos = new ZipOutputStream(csum);
//使用缓冲输出流包装,提升性能
BufferedOutputStream out = new BufferedOutputStream(zos);
//注释
zos.setComment("A test of Java Zipping");
for(String s : args){
System.out.println("Writing file " + s);
//读文件
BufferedReader in = new BufferedReader(new FileReader(s));
zos.putNextEntry(new ZipEntry(s));
int c;
while((c = in.read()) != -1){
out.write(c);
}
in.close();
out.flush();
}
out.close();
System.out.println("Checksum: " + csum.getChecksum().getValue());
//解压缩
System.out.println("Reading file: ");
FileInputStream in = new FileInputStream(FILE);
CheckedInputStream csumi = new CheckedInputStream(in, new Adler32());
ZipInputStream zin = new ZipInputStream(csumi);
BufferedInputStream bis = new BufferedInputStream(zin);
ZipEntry ze;
while((ze = zin.getNextEntry()) != null){
System.out.println("Reading file " + ze);
int x;
while((x = bis.read()) != -1){
System.out.write(x);
}
}
if(args.length == 1){
System.out.println("Checksum: " + csumi.getChecksum().getValue());
}
bis.close();
ZipFile zf = new ZipFile(FILE);
@SuppressWarnings("rawtypes")
Enumeration e = zf.entries();
while(e.hasMoreElements()){
ZipEntry ze2 = (ZipEntry)e.nextElement();
System.out.println("File: " + ze2);
}
zf.close();
}
}
分享到:
相关推荐
在Java编程中,有时我们需要从网络上下载多个文件并将其打包为一个压缩文件,例如ZIP格式,以便于存储或分发。这个过程涉及到文件I/O操作、网络请求以及压缩算法的使用。以下是对这个场景的详细说明: 1. **网络...
本篇文章将深入探讨如何使用Java的内置库`java.util.zip`来实现Zip文件的压缩功能,尤其是针对多个文件的压缩实例。我们将讨论相关的API、步骤以及源码解析。 1. **Java ZipOutputStream类**: `ZipOutputStream`...
例如,你可以创建一个Servlet,通过`HttpServletRequest`的`Part`接口来处理单个文件或多个文件的上传。下面是一个简单的例子: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam(...
该包包含了多个类,如`ZipEntry`、`ZipOutputStream`等,它们可以用于创建和管理ZIP文件。通常情况下,文件压缩是在客户端或服务器端执行的任务,用于减少文件大小、优化存储空间或者便于在网络上传输。 #### 代码...
Zip文件格式是一种广泛使用的压缩格式,它允许将多个文件打包成一个单一的压缩文件。在Java中,我们可以使用java.util.zip包中的ZipOutputStream和ZipInputStream类来对Zip文件进行压缩和解压缩操作。 **压缩Zip...
本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...
本实例源码主要关注如何使用Java的ZipOutputStream类来将多个文件压缩成一个Zip文件。ZipOutputStream是Java IO库的一部分,它允许程序员创建符合ZIP格式的压缩输出流。 首先,我们需要引入必要的Java IO和Zip相关...
这个压缩包“Javaio.zip”显然包含了关于Java IO的一些示例代码或者教程,主要涵盖了输出流、输入流、对象流和字节流这四个关键概念。 1. **输出流(OutputStream)**: 输出流是Java IO中的基础接口,用于数据的输出...
这个过程可以用于归档多个文件或者整个目录结构,便于存储或传输。下面我们将详细探讨如何使用Java来生成ZIP压缩文件,以及涉及的相关知识点。 首先,Java标准库提供了`java.util.zip`包,该包包含了处理压缩文件...
ZIP是一种常用的文件压缩格式,它能将多个文件或目录打包成一个单一的压缩文件,便于存储和传输。在Java中,我们可以使用`java.util.zip`包中的类来处理ZIP文件。 1. **读取和解压ZIP文件**: - 使用`java.io....
单个文件、多个文件压缩 /** * 使用给定密码压缩指定文件或文件夹到指定位置. * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"". * 如果传null或者""则将压缩文件存放在当前...
ZIP是一种通用的数据压缩和归档格式,可以包含多个文件和目录,每个都经过独立压缩。在Java中,我们可以利用java.util.zip包中的类来处理ZIP文件,主要包括ZipOutputStream用于压缩,ZipInputStream用于解压缩。 **...
2. **Apache Commons Compress**:这是一个第三方库,提供了更多的压缩功能,包括对ZIP的支持,相比Java内置的`java.util.zip`更加强大和灵活。 3. **ZipOutputStream**:用于创建ZIP格式的输出流,它可以被用来写入...
ZIP文件是一种广泛使用的文件归档格式,它可以将多个文件和目录组合成一个单一的可压缩文件,方便存储和传输。在Java中,我们可以使用`java.util.zip`包中的类来读取和解压ZIP文件。 首先,我们需要了解几个关键的...
在这个案例中,我们讨论的主题是如何利用Java的IO流实现文件复制,特别是使用字节流进行操作。字节流是Java IO流的一种类型,它可以处理任何类型的原始数据,因为所有数据在计算机内部最终都会被转化为字节序列。 ...
`ZipOutputStream`可以用来创建ZIP文件,将多个小文件合并成一个压缩包;而`ZipInputStream`则可以用来读取和解压缩ZIP文件。在`ZipOperation`和`ZipDirectory`类中,可能会包含创建和管理ZIP档案的逻辑。 6. **类...
这个实例源码展示了如何使用Java内置的`java.util.zip`库来实现Zip文件的创建,将多个文件压缩到一个单一的Zip档案中。让我们详细探讨一下这个过程中的关键知识点。 首先,我们需要导入必要的Java库: ```java ...
这个“基于Java的用Zip压缩多个文件实例源码.zip”文件显然包含了一组示例代码,教你如何使用Java来创建和压缩多个文件到一个Zip档案中。在Java中,处理文件压缩的任务通常涉及到`java.util.zip`包中的类,如`...
下面是一个简化的示例代码片段,演示了如何使用Java将文件或目录打包成ZIP: ```java import java.io.*; import java.util.zip.*; public class ZipHelper { public static void createZipFile(String sourcePath...