Java中的Zip压缩和解压缩操作
在Java中,我们可以使用java.util.zip包中的类来进行文件的压缩和解压缩操作,这个包提供了ZipOutputStream和ZipInputStream两个类,分别用于压缩和解压缩文件,下面,我们将详细介绍如何使用这两个类进行文件的压缩和解压缩操作。
我们来看一下如何使用ZipOutputStream类进行文件的压缩,ZipOutputStream类是OutputStream的子类,它主要用于将数据写入到ZIP文件中,以下是一个简单的示例:
import java.io.*;
import java.util.zip.*;
public class ZipExample {
public static void main(String[] args) throws Exception {
// 创建一个文件输出流,用于写入ZIP文件
FileOutputStream fos = new FileOutputStream("test.zip");
// 创建一个ZIP输出流,并将文件输出流包装起来
ZipOutputStream zos = new ZipOutputStream(fos);
// 创建一个文件输入流,用于读取要压缩的文件
FileInputStream fis = new FileInputStream("test.txt");
// 创建一个ZIP条目,并将其添加到ZIP输出流中
ZipEntry zipEntry = new ZipEntry("test.txt");
zos.putNextEntry(zipEntry);
// 读取文件内容,并写入到ZIP输出流中
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
// 关闭ZIP条目和ZIP输出流
zos.closeEntry();
zos.close();
fis.close();
fos.close();
}
}
在上面的代码中,我们首先创建了一个文件输出流,然后将其包装成一个ZIP输出流,接着,我们创建了一个文件输入流,用于读取要压缩的文件,我们创建了一个ZIP条目,并将其添加到ZIP输出流中,我们读取文件内容,并将其写入到ZIP输出流中,当所有内容都写入到ZIP输出流后,我们关闭了ZIP条目和ZIP输出流。
接下来,我们来看一下如何使用ZipInputStream类进行文件的解压缩,ZipInputStream类是InputStream的子类,它主要用于从ZIP文件中读取数据,以下是一个简单的示例:
import java.io.*;
import java.util.zip.*;
public class UnzipExample {
public static void main(String[] args) throws Exception {
// 创建一个文件输入流,用于读取ZIP文件
FileInputStream fis = new FileInputStream("test.zip");
// 创建一个ZIP输入流,并将文件输入流包装起来
ZipInputStream zis = new ZipInputStream(fis);
// 创建一个文件输出流,用于写入解压后的文件
FileOutputStream fos = new FileOutputStream("test_unzipped.txt");
// 创建一个ZIP条目,并将其从ZIP输入流中读取出来
ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) {
// 读取ZIP条目的内容,并写入到文件输出流中
byte[] bytes = new byte[1024];
int length;
while ((length = zis.read(bytes)) > 0) {
fos.write(bytes, 0, length);
}
// 关闭当前ZIP条目,并获取下一个ZIP条目
zis.closeEntry();
zipEntry = zis.getNextEntry();
}
// 关闭ZIP输入流和文件输出流
zis.close();
fos.close();
fis.close();
}
}
在上面的代码中,我们首先创建了一个文件输入流,然后将其包装成一个ZIP输入流,接着,我们创建了一个文件输出流,用于写入解压后的文件,我们创建了一个ZIP条目,并将其从ZIP输入流中读取出来,我们读取ZIP条目的内容,并将其写入到文件输出流中,当所有ZIP条目都处理完后,我们关闭了ZIP输入流和文件输出流。



还没有评论,来说两句吧...