欢迎访问宙启技术站
智能推送

如何在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函数,用于实现文件压缩。