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

Java.io:文件压缩与解压缩操作指南

发布时间:2024-01-19 09:34:44

文件压缩和解压缩是在Java中进行文件操作的常见需求之一。Java提供了java.util.zip包来进行文件压缩和解压缩操作。本指南将带你一步步了解如何使用Java进行文件压缩和解压缩,并提供相关的使用例子。

1. 文件压缩

文件压缩是将一个或多个文件打包成一个压缩文件。Java中可以使用ZipOutputStream类来完成文件压缩操作。下面是一个文件压缩的使用例子:

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

public class FileCompressor {
    public static void compress(String sourcePath, String targetPath) throws IOException {
        FileOutputStream fos = new FileOutputStream(targetPath);
        ZipOutputStream zos = new ZipOutputStream(fos);

        File file = new File(sourcePath);
        if (file.isDirectory()) {
            compressDirectory(file, file.getName(), zos);
        } else {
            compressFile(file, zos);
        }

        zos.closeEntry();
        zos.close();
        fos.close();
    }

    private static void compressDirectory(File directory, String path, ZipOutputStream zos) throws IOException {
        File[] files = directory.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                compressDirectory(file, path + "/" + file.getName(), zos);
            } else {
                compressFile(file, path, zos);
            }
        }
    }

    private static void compressFile(File file, String path, ZipOutputStream zos) throws IOException {
        FileInputStream fis = new FileInputStream(file);
        ZipEntry zipEntry = new ZipEntry(path + "/" + file.getName());
        zos.putNextEntry(zipEntry);

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

        fis.close();
    }
}

在上述例子中,compress方法接受源文件路径和目标压缩文件路径作为参数,使用FileOutputStream创建一个用于写入压缩文件的输出流,并将其传递给ZipOutputStream类的构造函数来创建ZipOutputStream对象。

然后,判断源文件是目录还是文件,如果是目录则调用compressDirectory方法进行递归压缩,如果是文件则调用compressFile方法进行压缩。在进行压缩时,首先创建一个ZipEntry对象表示一个文件的压缩条目,然后将其添加到ZipOutputStream中。使用FileInputStream来读取文件内容,并使用write方法将数据写入ZipOutputStream中。

2. 文件解压缩

文件解压缩是将压缩文件解包成一个或多个文件。Java中可以使用ZipInputStream类来完成文件解压缩操作。下面是一个文件解压缩的使用例子:

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

public class FileDecompressor {
    public static void decompress(String sourcePath, String targetPath) throws IOException {
        FileInputStream fis = new FileInputStream(sourcePath);
        ZipInputStream zis = new ZipInputStream(fis);

        ZipEntry zipEntry = zis.getNextEntry();
        while (zipEntry != null) {
            String filePath = targetPath + File.separator + zipEntry.getName();
            if (zipEntry.isDirectory()) {
                new File(filePath).mkdirs();
            } else {
                decompressFile(zis, filePath);
            }

            zis.closeEntry();
            zipEntry = zis.getNextEntry();
        }

        zis.close();
        fis.close();
    }

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

在上述例子中,decompress方法接受源压缩文件路径和目标解压缩文件路径作为参数,使用FileInputStream创建一个用于读取压缩文件的输入流,并将其传递给ZipInputStream类的构造函数来创建ZipInputStream对象。

然后,使用getNextEntry方法获取每个压缩文件的条目,并根据条目的类型进行不同的处理。如果是目录类型,则使用mkdirs方法创建相应的目录;如果是文件类型,则调用decompressFile方法进行解压缩。在解压缩文件时,首先使用FileOutputStream创建一个用于写入解压缩文件的输出流,并使用read方法读取ZipInputStream中的数据,然后使用write方法将数据写入输出流中。

以上就是使用Java进行文件压缩和解压缩的操作指南和相关例子。通过这些例子,你可以学会如何使用Java进行文件压缩和解压缩操作,并可以根据自己的需求进行相应的扩展和改进。希望对你有所帮助!