如何在Java函数中实现文件压缩
发布时间:2023-06-23 01:10:40
在Java中,可以通过使用ZipOutputStream类来实现文件压缩。ZipOutputStream是Java中的一个压缩流,它可以把一组文件或文件夹打包成Zip文件。ZipOutputStream类提供了压缩和解压缩文件的功能。下面是一个实现文件压缩的Java函数:
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileCompress {
public static void main(String[] args) {
String sourceFolderPath = "C:/Users/Documents/SourceFolder";
String zipFilePath = "C:/Users/Documents/CompressedFile.zip";
compressFiles(sourceFolderPath, zipFilePath);
}
public static void compressFiles(String sourceFolderPath, String zipFilePath) {
try {
FileOutputStream fos = new FileOutputStream(zipFilePath);
ZipOutputStream zos = new ZipOutputStream(fos);
File sourceFolder = new File(sourceFolderPath);
compressFolder(sourceFolder, sourceFolder.getName(), zos);
zos.closeEntry();
zos.close();
fos.close();
System.out.println("File compression complete!");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void compressFolder(File folder, String folderName, ZipOutputStream zos) throws IOException {
for (File file : folder.listFiles()) {
if (file.isFile()) {
FileInputStream fis = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(folderName + "/" + file.getName());
zos.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zos.write(bytes, 0, length);
}
zos.closeEntry();
fis.close();
} else {
compressFolder(file, folderName + "/" + file.getName(), zos);
}
}
}
}
上述代码中的compressFiles()方法接收两个参数:源文件夹路径和压缩文件路径。这个方法首先创建一个FileOutputStream对象,它负责将压缩后文件的数据写入文件。接着,创建一个ZipOutputStream对象,代表要压缩的文件。然后,调用compressFolder()方法对文件夹进行递归压缩,将文件写入ZipOutputStream中。最后,ZipOutputStream对象关闭,并释放所有资源。
compressFolder()方法用来对文件夹进行递归压缩。它使用了一个for-each循环来遍历文件夹中的所有文件。如果当前文件不是文件夹,那么就将其压缩为一个Zip文件写入ZipOutputStream中。如果当前文件是文件夹,则递归调用compressFolder()方法对子文件夹进行压缩。在写入文件之前,需要创建一个ZipEntry对象,指定要写入文件的名称。
以上就是一个基本的Java函数,用于实现文件压缩。
