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

Java函数如何对文件进行压缩和解压缩操作?

发布时间:2023-09-03 01:08:17

在Java中,可以使用java.util.zip包中的类来对文件进行压缩和解压缩操作。以下是一种基本的压缩和解压缩文件的方法:

1. 压缩文件:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FileCompression {
    public static void compressFile(File file, String outputPath) throws IOException {
        FileOutputStream fos = new FileOutputStream(outputPath);
        ZipOutputStream zipOut = new ZipOutputStream(fos);
        FileInputStream fis = new FileInputStream(file);
        ZipEntry zipEntry = new ZipEntry(file.getName());
        zipOut.putNextEntry(zipEntry);

        byte[] bytes = new byte[1024];
        int length;
        while ((length = fis.read(bytes)) >= 0) {
            zipOut.write(bytes, 0, length);
        }

        zipOut.close();
        fis.close();
        fos.close();
    }
}

2. 解压文件:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class FileDecompression {
    public static void decompressFile(String zipFilePath, String outputPath) throws IOException {
        byte[] buffer = new byte[1024];
        ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
        ZipEntry entry = zipIn.getNextEntry();
        
        while (entry != null) {
            String filePath = outputPath + File.separator + entry.getName();
            if (!entry.isDirectory()) {
                extractFile(zipIn, filePath);
            }

            zipIn.closeEntry();
            entry = zipIn.getNextEntry();
        }

        zipIn.close();
    }

    private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        FileOutputStream fos = new FileOutputStream(filePath);
        int length;
        byte[] buffer = new byte[1024];
        while ((length = zipIn.read(buffer)) > 0) {
            fos.write(buffer, 0, length);
        }
        fos.close();
    }
}

使用示例:

public class Main {
    public static void main(String[] args) {
        try {
            // 压缩文件
            FileCompression.compressFile(new File("input.txt"), "compressed.zip");
            
            // 解压文件
            FileDecompression.decompressFile("compressed.zip", "output");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码是基于传统的Java IO进行文件压缩和解压缩操作。在实际应用中,也可以使用更高级的方式,如使用NIO进行文件读写操作,或使用Apache Commons Compress库等第三方库来简化操作。