目录
在Java中,你可以使用java.util.zip包来实现解压和压缩文件。这个包提供了对ZIP格式的文件进行压缩和解压的功能。
ZipOutputStream 是 Java 中用于创建 ZIP 文件的类。它是 java.util.zip 包中的一部分,允许你将多个文件或目录压缩到单个 ZIP 文件中。
创建 ZipOutputStream: 要创建 ZipOutputStream 对象,你需要将其与一个输出流(通常是 FileOutputStream)关联,以便将压缩数据写入文件。
- FileOutputStream fos = new FileOutputStream("compressed.zip");
- ZipOutputStream zipOut = new ZipOutputStream(fos);
添加 ZIP 条目: 使用 putNextEntry 方法来添加一个新的 ZIP 条目(文件或目录)。你需要指定条目的名称,它可以是文件名或相对路径。
- ZipEntry zipEntry = new ZipEntry("file.txt");
- zipOut.putNextEntry(zipEntry);
写入数据: 使用 write 方法来将数据写入 ZIP 条目。你可以循环从文件或其他数据源中读取数据,并将其写入 ZipOutputStream。
- byte[] buffer = new byte[1024];
- int length;
- while ((length = inputStream.read(buffer)) >= 0) {
- zipOut.write(buffer, 0, length);
- }
关闭 ZIP 条目: 当完成写入 ZIP 条目的数据后,必须使用 closeEntry 方法来关闭条目。
zipOut.closeEntry(); 关闭 ZipOutputStream: 当所有 ZIP 条目都已添加和关闭后,需要关闭 ZipOutputStream。
zipOut.close(); ZIP 条目属性: ZipEntry 对象允许你设置各种属性,如文件的修改时间、权限等。
- ZipEntry zipEntry = new ZipEntry("file.txt");
- zipEntry.setTime(file.lastModified());
- zipEntry.setSize(file.length());
- zipEntry.setMethod(ZipEntry.STORED);
压缩方法: ZipOutputStream 支持不同的压缩方法,可以根据需要设置。默认情况下,使用标准的 DEFLATED 压缩方法。
异常处理: 要注意处理可能的异常,例如文件不存在、权限问题等。确保正确关闭流以释放资源。
压缩文件示例如下:
- 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 文件中读取数据。
创建 ZipOutputStream: 要创建 ZipOutputStream 对象,你需要将其与一个输出流(通常是 FileOutputStream)关联,以便将压缩数据写入文件。
- FileOutputStream fos = new FileOutputStream("compressed.zip");
- ZipOutputStream zipOut = new ZipOutputStream(fos);
添加 ZIP 条目: 使用 putNextEntry 方法来添加一个新的 ZIP 条目(文件或目录)。你需要指定条目的名称,它可以是文件名或相对路径。
- ZipEntry zipEntry = new ZipEntry("file.txt");
- zipOut.putNextEntry(zipEntry);
写入数据: 使用 write 方法来将数据写入 ZIP 条目。你可以循环从文件或其他数据源中读取数据,并将其写入 ZipOutputStream。
- byte[] buffer = new byte[1024];
- int length;
- while ((length = inputStream.read(buffer)) >= 0) {
- zipOut.write(buffer, 0, length);
- }
关闭 ZIP 条目: 当完成写入 ZIP 条目的数据后,必须使用 closeEntry 方法来关闭条目。
zipOut.closeEntry();
关闭 ZipOutputStream: 当所有 ZIP 条目都已添加和关闭后,需要关闭 ZipOutputStream。
zipOut.close();
ZIP 条目属性: ZipEntry 对象允许你设置各种属性,如文件的修改时间、权限等。
- ZipEntry zipEntry = new ZipEntry("file.txt");
- zipEntry.setTime(file.lastModified());
- zipEntry.setSize(file.length());
- zipEntry.setMethod(ZipEntry.STORED);
压缩方法: ZipOutputStream 支持不同的压缩方法,可以根据需要设置。默认情况下,使用标准的 DEFLATED 压缩方法。
异常处理: 要注意处理可能的异常,例如文件不存在、权限问题等。确保正确关闭流以释放资源。