Java解压带密码的ZIP文件
在Java中,我们经常会遇到需要解压缩ZIP文件的需求。然而,有些ZIP文件可能会被设置了密码保护,这就需要我们使用密码来解压缩它们。本文将介绍如何使用Java解压带密码的ZIP文件,并提供相应的代码示例。
ZIP文件的解压
ZIP是一种常见的文件压缩格式,它可以将多个文件和文件夹打包成一个单一的文件。在Java中,我们可以使用java.util.zip
包中的ZipInputStream
类来解压ZIP文件。
首先,我们需要创建一个ZipInputStream
对象,并将ZIP文件的输入流传递给它。然后,我们可以使用getNextEntry
方法逐个获取ZIP文件中的条目(文件或文件夹),并将其解压到指定的目标目录中。
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipExample {
public static void unzip(String zipFilePath, String destDirectory) throws IOException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if (!entry.isDirectory()) {
extractFile(zipIn, filePath);
} else {
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}
private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[4096];
int read;
while ((read = zipIn.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
}
public static void main(String[] args) {
String zipFilePath = "path/to/your/zip/file.zip";
String destDirectory = "path/to/your/destination/directory";
try {
unzip(zipFilePath, destDirectory);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码演示了如何使用Java解压ZIP文件。我们首先创建了一个ZipInputStream
对象,并将ZIP文件的输入流传递给它。然后,我们使用getNextEntry
方法逐个获取ZIP文件中的条目,并将其解压到指定的目标目录中。如果条目是一个文件,我们使用extractFile
方法将其解压;如果是一个文件夹,我们创建一个对应的目录。
带密码的ZIP文件解压
有时候,ZIP文件可能会被设置了密码保护。在Java中,我们可以使用java.util.zip
包中的ZipFile
类来解压带密码的ZIP文件。
首先,我们需要创建一个ZipFile
对象,并将ZIP文件的路径传递给它。然后,我们可以使用getInputStream
方法获取ZIP文件中的条目的输入流,并将其解压到指定的目标目录中。
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class UnzipWithPasswordExample {
public static void unzip(String zipFilePath, String destDirectory, String password) throws IOException {
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipFile zipFile = new ZipFile(zipFilePath);
zipFile.setPassword(password.toCharArray());
zipFile.stream().forEach(entry -> {
try {
String filePath = destDirectory + File.separator + entry.getFileName();
if (!entry.isDirectory()) {
extractFile(zipFile.getInputStream(entry), filePath);
} else {
File dir = new File(filePath);
dir.mkdir();
}
} catch (IOException e) {
e.printStackTrace();
}
});
zipFile.close();
}
private static void extractFile(InputStream inputStream, String filePath) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[4096];
int read;
while ((read = inputStream.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
inputStream.close();
}
public static void main(String[] args) {
String zipFilePath = "path/to/your/encrypted/zip/file.zip";
String destDirectory = "path/to/your/destination/directory";
String password = "your_password