Java函数如何实现文件的压缩和解压缩?
发布时间:2023-07-27 07:41:18
在Java中,可以使用 java.util.zip 包来实现文件的压缩和解压缩。该包提供了 ZipOutputStream 和 ZipInputStream 类,可以用于创建和读取ZIP压缩文件。
首先,让我们看看如何压缩文件:
1. 创建一个 ZipOutputStream 对象,并将其与要压缩的文件关联起来。
FileOutputStream fos = new FileOutputStream("compressed.zip");
ZipOutputStream zipOut = new ZipOutputStream(fos);
2. 创建一个输入流读取要压缩的文件的内容。
File fileToCompress = new File("file.txt");
FileInputStream fis = new FileInputStream(fileToCompress);
3. 创建一个 ZipEntry 对象,将文件名设置为要压缩的文件名,并将其写入 ZipOutputStream。
ZipEntry zipEntry = new ZipEntry(fileToCompress.getName()); zipOut.putNextEntry(zipEntry);
4. 将要压缩的文件内容逐个字节地写入 ZipOutputStream,直到全部写完。
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
5. 关闭输入流和 ZipOutputStream。
fis.close(); zipOut.close();
完成上述步骤后,文件 file.txt 将会被压缩成 compressed.zip。
接下来,我们来看看如何解压缩文件。
1. 创建一个 ZipInputStream 对象,并将其与要解压缩的ZIP文件关联起来。
FileInputStream fis = new FileInputStream("compressed.zip");
ZipInputStream zipIn = new ZipInputStream(fis);
2. 使用 getNextEntry 方法获取下一个 ZipEntry 对象。
ZipEntry zipEntry = zipIn.getNextEntry();
3. 创建一个输出流以将解压缩后的文件写入磁盘。
FileOutputStream fos = new FileOutputStream("uncompressed.txt");
4. 将 ZipEntry 中的内容逐个字节地读取并写入输出流中,直到全部写完。
byte[] bytes = new byte[1024];
int length;
while ((length = zipIn.read(bytes)) >= 0) {
fos.write(bytes, 0, length);
}
5. 关闭输入流和输出流。
zipIn.close(); fos.close();
完成上述步骤后,compressed.zip 文件将会被解压缩成 uncompressed.txt。
通过上述方法,您可以在Java中实现文件的压缩和解压缩。请注意,在处理压缩文件时,应该小心处理IO异常,并且确保及时关闭相应的流对象,以避免资源泄漏。
