目录

一、压缩文件

二、解压文件 


在Java中,你可以使用java.util.zip包来实现解压和压缩文件。这个包提供了对ZIP格式的文件进行压缩和解压的功能。

一、压缩文件

ZipOutputStream 是 Java 中用于创建 ZIP 文件的类。它是 java.util.zip 包中的一部分,允许你将多个文件或目录压缩到单个 ZIP 文件中。

  1. 创建 ZipOutputStream: 要创建 ZipOutputStream 对象,你需要将其与一个输出流(通常是 FileOutputStream)关联,以便将压缩数据写入文件。

    FileOutputStream fos = new FileOutputStream("compressed.zip"); 
    ZipOutputStream zipOut = new ZipOutputStream(fos);
  2. 添加 ZIP 条目: 使用 putNextEntry 方法来添加一个新的 ZIP 条目(文件或目录)。你需要指定条目的名称,它可以是文件名或相对路径。

    ZipEntry zipEntry = new ZipEntry("file.txt"); 
    zipOut.putNextEntry(zipEntry);
  3. 写入数据: 使用 write 方法来将数据写入 ZIP 条目。你可以循环从文件或其他数据源中读取数据,并将其写入 ZipOutputStream

    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) >= 0) {
        zipOut.write(buffer, 0, length);
    }
    
  4. 关闭 ZIP 条目: 当完成写入 ZIP 条目的数据后,必须使用 closeEntry 方法来关闭条目。

    zipOut.closeEntry();
  5. 关闭 ZipOutputStream: 当所有 ZIP 条目都已添加和关闭后,需要关闭 ZipOutputStream

    zipOut.close();
  6. ZIP 条目属性: ZipEntry 对象允许你设置各种属性,如文件的修改时间、权限等。

    ZipEntry zipEntry = new ZipEntry("file.txt");
    zipEntry.setTime(file.lastModified());
    zipEntry.setSize(file.length());
    zipEntry.setMethod(ZipEntry.STORED);
    
  7. 压缩方法: ZipOutputStream 支持不同的压缩方法,可以根据需要设置。默认情况下,使用标准的 DEFLATED 压缩方法。

  8. 异常处理: 要注意处理可能的异常,例如文件不存在、权限问题等。确保正确关闭流以释放资源。

 压缩文件示例如下:

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

public class FileCompression {
    public static void main(String[] args) {
        String sourceFile = "source.txt"; // 要压缩的文件
        String compressedFile = "compressed.zip"; // 压缩后的文件

        try {
            FileOutputStream fos = new FileOutputStream(compressedFile);
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            File fileToZip = new File(sourceFile);

            FileInputStream fis = new FileInputStream(fileToZip);
            ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
            zipOut.putNextEntry(zipEntry);

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

            fis.close();
            zipOut.close();
            fos.close();
            System.out.println("文件压缩完成:" + compressedFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述示例中,我们使用ZipOutputStream将文件source.txt压缩为compressed.zip

二、解压文件 

ZipInputStream 是 Java 中用于解压缩 ZIP 文件的类。它是 java.util.zip 包中的一部分,允许你从 ZIP 文件中读取数据。

  1. 创建 ZipOutputStream: 要创建 ZipOutputStream 对象,你需要将其与一个输出流(通常是 FileOutputStream)关联,以便将压缩数据写入文件。

    FileOutputStream fos = new FileOutputStream("compressed.zip");
    ZipOutputStream zipOut = new ZipOutputStream(fos);
    
  2. 添加 ZIP 条目: 使用 putNextEntry 方法来添加一个新的 ZIP 条目(文件或目录)。你需要指定条目的名称,它可以是文件名或相对路径。

    ZipEntry zipEntry = new ZipEntry("file.txt");
    zipOut.putNextEntry(zipEntry);
    
  3. 写入数据: 使用 write 方法来将数据写入 ZIP 条目。你可以循环从文件或其他数据源中读取数据,并将其写入 ZipOutputStream

    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) >= 0) {
        zipOut.write(buffer, 0, length);
    }
    
  4. 关闭 ZIP 条目: 当完成写入 ZIP 条目的数据后,必须使用 closeEntry 方法来关闭条目。

    zipOut.closeEntry();
    
  5. 关闭 ZipOutputStream: 当所有 ZIP 条目都已添加和关闭后,需要关闭 ZipOutputStream

    zipOut.close();
    
  6. ZIP 条目属性: ZipEntry 对象允许你设置各种属性,如文件的修改时间、权限等。

    ZipEntry zipEntry = new ZipEntry("file.txt");
    zipEntry.setTime(file.lastModified());
    zipEntry.setSize(file.length());
    zipEntry.setMethod(ZipEntry.STORED);
    
  7. 压缩方法: ZipOutputStream 支持不同的压缩方法,可以根据需要设置。默认情况下,使用标准的 DEFLATED 压缩方法。

  8. 异常处理: 要注意处理可能的异常,例如文件不存在、权限问题等。确保正确关闭流以释放资源。

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐