Java 解压缩
压缩和解压缩是在计算机科学领域中常见的操作。它们被广泛应用于文件传输、数据存储和备份等方面。在 Java 中,我们可以使用内置的 java.util.zip
包来完成文件的压缩和解压缩操作。本文将介绍如何使用 Java 进行解压缩,并提供相关的代码示例。
压缩文件
在进行解压缩之前,我们首先需要将文件压缩成一个压缩包。Java 提供了 ZipOutputStream
类来实现文件的压缩。下面是一个示例代码,用于将指定目录下的所有文件压缩成一个 Zip 文件:
import java.io.*;
import java.util.zip.*;
public class ZipUtility {
public static void compress(String sourceDir, String destinationZipFile) throws IOException {
FileOutputStream fos = new FileOutputStream(destinationZipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
File file = new File(sourceDir);
compressDirectory(file, file.getName(), zos);
zos.closeEntry();
zos.close();
fos.close();
System.out.println("压缩完成!");
}
private static void compressDirectory(File dir, String baseDir, ZipOutputStream zos) throws IOException {
File[] files = dir.listFiles();
byte[] buffer = new byte[1024];
for (File file : files) {
if (file.isDirectory()) {
compressDirectory(file, baseDir + "/" + file.getName(), zos);
continue;
}
FileInputStream fis = new FileInputStream(file);
zos.putNextEntry(new ZipEntry(baseDir + "/" + file.getName()));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
fis.close();
}
}
}
上述代码中,compress
方法接受源目录和目标 Zip 文件的路径作为参数,将源目录中的所有文件压缩成一个 Zip 文件。compressDirectory
方法用于递归地压缩目录下的所有文件和子目录。
解压缩文件
Java 提供了 ZipInputStream
类来实现文件的解压缩。下面是一个示例代码,用于将压缩包中的文件解压到指定目录:
import java.io.*;
import java.util.zip.*;
public class UnzipUtility {
public static void decompress(String zipFile, String destDir) throws IOException {
byte[] buffer = new byte[1024];
File folder = new File(destDir);
if (!folder.exists()) {
folder.mkdir();
}
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
ZipEntry entry = zis.getNextEntry();
while (entry != null) {
String fileName = entry.getName();
File newFile = new File(destDir + File.separator + fileName);
if (entry.isDirectory()) {
newFile.mkdirs();
} else {
FileOutputStream fos = new FileOutputStream(newFile);
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.close();
}
zis.closeEntry();
entry = zis.getNextEntry();
}
zis.close();
System.out.println("解压完成!");
}
}
上述代码中,decompress
方法接受压缩包路径和目标目录路径作为参数,将压缩包中的文件解压到目标目录。如果压缩包中有子目录,将会在目标目录中创建相应的目录结构。
使用示例
下面是一个使用示例,将一个目录压缩成 Zip 文件,并将该 Zip 文件解压到指定目录:
public class Main {
public static void main(String[] args) {
String sourceDir = "/path/to/source/directory";
String destinationZipFile = "/path/to/destination/zip/file.zip";
String destDir = "/path/to/destination/directory";
try {
ZipUtility.compress(sourceDir, destinationZipFile);
UnzipUtility.decompress(destinationZipFile, destDir);
} catch (IOException e) {
e.printStackTrace();
}
}
}
将上述代码中的路径替换为实际路径,并执行程序,即可完成文件的压缩和解压缩操作。
状态图
下面是压缩和解压缩操作的状态图:
stateDiagram
[*] --> Compress
Compress --> [*]
Compress --> Decom