目录
在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 压缩方法。 -
异常处理: 要注意处理可能的异常,例如文件不存在、权限问题等。确保正确关闭流以释放资源。