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输入流和文件输出流。
还没有评论,来说两句吧...