Java

Java中如何进行文件的压缩与解压缩

小樊
81
2024-10-27 07:18:02
栏目: 编程语言

在Java中,可以使用java.util.zip包中的类进行文件的压缩和解压缩。以下是一个简单的示例,演示了如何使用这些类来压缩和解压缩文件:

压缩文件

import java.io.*;
import java.util.zip.*;

public class ZipFileExample {
    public static void main(String[] args) {
        String inputDir = "path/to/input/directory";
        String zipFilePath = "path/to/output.zip";

        try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
            File dir = new File(inputDir);
            zipDirectory(dir, zos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void zipDirectory(File dir, ZipOutputStream zos) throws IOException {
        if (!dir.isDirectory()) {
            throw new IllegalArgumentException("Input must be a directory");
        }

        for (File file : dir.listFiles()) {
            if (file.isDirectory()) {
                zipDirectory(file, zos);
            } else {
                try (FileInputStream fis = new FileInputStream(file);
                     ZipEntry ze = new ZipEntry(file.getName())) {
                    zos.putNextEntry(ze);

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

                    zos.closeEntry();
                }
            }
        }
    }
}

解压缩文件

import java.io.*;
import java.util.zip.*;

public class UnzipFileExample {
    public static void main(String[] args) {
        String zipFilePath = "path/to/input.zip";
        String outputDir = "path/to/output/directory";

        try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath))) {
            ZipEntry ze = zis.getNextEntry();
            while (ze != null) {
                String fileName = ze.getName();
                File newFile = new File(outputDir + File.separator + fileName);

                if (!ze.isDirectory()) {
                    try (FileOutputStream fos = new FileOutputStream(newFile);
                         BufferedOutputStream bos = new BufferedOutputStream(fos)) {
                        byte[] buffer = new byte[1024];
                        int length;
                        while ((length = zis.read(buffer)) > 0) {
                            bos.write(buffer, 0, length);
                        }
                    }
                } else {
                    new File(outputDir + File.separator + fileName).mkdirs();
                }

                ze = zis.getNextEntry();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请注意,这些示例仅用于演示目的,并且假设输入和输出路径是正确的。在实际应用中,您可能需要添加额外的错误处理和验证。

0
看了该问题的人还看了