如何使用java函数实现文件压缩和解压缩?
发布时间:2023-06-10 21:12:31
Java提供了压缩和解压缩文件的功能。Java中有一个叫做java.util.zip的包,其中包含了ZipOutputStream和ZipInputStream两个主要的类,分别用于实现文件压缩和解压缩。
文件压缩
文件压缩的过程,可以将多个文件或文件夹压缩成一个.zip格式文件。具体步骤如下:
1. 选择压缩文件或文件夹,并创建ZipOutputStream对象。
2. 创建压缩文件。使用ZipEntry类来写入每个文件的条目。
3. 使用BufferedInputStream读入指定的文件内容。
4. 使用ZipOutputStream写入压缩文件。
5. 关闭输入输出流。
以下是示例代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileCompression {
public static void main(String[] args) {
String[] filesToCompress = {"file1.txt", "file2.jpg", "folder1"};
try {
//创建压缩文件
FileOutputStream fos = new FileOutputStream("compressed.zip");
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);
//循环压缩每个文件或目录
for (String file : filesToCompress) {
if (file.endsWith(File.separator)) { //如果是目录,则创建ZipEntry实例
ZipEntry entry = new ZipEntry(file);
zos.putNextEntry(entry); //写入该目录
} else { //如果是文件,则写入ZipEntry实例
ZipEntry entry = new ZipEntry(file);
zos.putNextEntry(entry);
//使用缓冲流读入文件内容
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
//循环读取并写入ZipOutputStream对象
byte[] data = new byte[1024];
int count;
while ((count = bis.read(data)) != -1) {
zos.write(data, 0, count);
}
bis.close();
}
}
zos.close(); //关闭压缩流
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
文件解压缩
文件解压缩的过程,可以将压缩文件解压缩到指定目录中。具体步骤如下:
1. 选择需要解压的zip文件,并创建ZipInputStream对象。
2. 逐一读取ZipEntry条目,并获取输入流。
3. 将输入流读入到缓冲区中。
4. 创建新文件并将缓冲区内容写入。
5. 关闭输入输出流。
以下是示例代码:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class FileDecompression {
public static void main(String[] args) {
try {
//创建ZipInputStream对象
ZipInputStream zis = new ZipInputStream(new FileInputStream("compressed.zip"));
//迭代读取ZipEntry
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
String fileName = entry.getName();
File newFile = new File(fileName);
//创建新文件
FileOutputStream fos = new FileOutputStream(newFile);
BufferedOutputStream bos = new BufferedOutputStream(fos);
//循环读取并写入文件对象
byte[] data = new byte[1024];
int count;
while ((count = zis.read(data)) != -1) {
bos.write(data, 0, count);
}
bos.close();
}
zis.close(); //关闭ZipInputStream流
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
在实现文件压缩和解压缩的过程中,需要注意关闭流以及处理可能出现的异常。此外,需要确保压缩和解压的文件路径、文件名及文件格式正确。
