[英]How to unzip multiple pssword protected zip files in an directory which has same password using java?
I am very new to java and I am trying to write an java program to unzip all zip files in an directory all of which have same password. 我对Java非常陌生,我试图编写一个Java程序来解压缩目录中所有具有相同密码的所有zip文件。 I have written an program which unzips an particular zip file by giving the password. 我编写了一个程序,通过提供密码来解压缩特定的zip文件。
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
//import java.util.zip.ZipFile;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;
public class Extraction {
public Extraction() {
try {
ZipFile zipFile = new
ZipFile("C:\\Users\\Desktop\\ZipFile\\myzip.zip");
if (zipFile.isEncrypted()) {
zipFile.setPassword("MYPASS!");
}
List fileHeaderList = zipFile.getFileHeaders();
for (int i = 0; i < fileHeaderList.size(); i++) {
FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
zipFile.extractFile(fileHeader, "C:\\Users\\Desktop\\ZipFile");
System.out.println("Extracted");
}
} catch (Exception e) {
System.out.println("Please Try Again");
}
}
public static void main(String[] args) {
new Extraction();
}
}
I have also written an code which unzips all the zip files (Which are not password protected) in an folder. 我还编写了一个代码,该代码可解压缩文件夹中的所有zip文件(不受密码保护)。
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
//import java.util.zip.ZipFile;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;
public class Extraction {
public static void main(String[] args) {
Extraction unzipper = new Extraction();
unzipper.unzipZipsInDirTo(Paths.get("D:/"), Paths.get("D:/unzipped"));
}
public void unzipZipsInDirTo(Path searchDir, Path unzipTo) {
final PathMatcher matcher = searchDir.getFileSystem().getPathMatcher("glob:**/*.zip");
try (final Stream<Path> stream = Files.list(searchDir)) {
stream.filter(matcher::matches).forEach(zipFile -> unzip(zipFile, unzipTo));
} catch (Exception e) {
System.out.println("Something went wrong, Please try again!!");
}
}
public void unzip(Path zipFile, Path outputPath) {
try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))) {
ZipEntry entry = zis.getNextEntry();
while (entry != null) {
Path newFilePath = outputPath.resolve(entry.getName());
if (entry.isDirectory()) {
Files.createDirectories(newFilePath);
} else {
if (!Files.exists(newFilePath.getParent())) {
Files.createDirectories(newFilePath.getParent());
}
try (OutputStream bos = Files.newOutputStream(outputPath.resolve(newFilePath))) {
byte[] buffer = new byte[Math.toIntExact(entry.getSize())];
int location;
while ((location = zis.read(buffer)) != -1) {
bos.write(buffer, 0, location);
}
}
}
entry = zis.getNextEntry();
}
} catch (Exception e1) {
System.out.println("Please try again");
}
}
}
I am bit confused how to integrate these 2 codes to make an program which unzips all the zip files in an directory which are password protected and has the same password. 我有点困惑如何集成这两个代码以创建一个程序,该程序将受密码保护并具有相同密码的目录中的所有zip文件解压缩。 Can anyone of you help me in integrating these 2 codes. 谁能帮助我整合这两个代码。 I searched a lot but did not get proper resolution so I am posting this. 我进行了很多搜索,但没有获得正确的分辨率,因此我将其发布了。 I hope my question is clear. 希望我的问题清楚。
Thanks guys although none answered my question. 谢谢大家,虽然没人回答我的问题。 I found the answer I am posting this as there might be someone else who might be looking for the similar answer. 我找到了要发布的答案,因为可能有人正在寻找类似的答案。
import java.io.File;
import java.util.List;
import javax.swing.filechooser.FileNameExtensionFilter;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.model.FileHeader;
public class SamExtraction {
public static void main(String[] args) {
final FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("N/A", "zip");
//Folder where zip file is present
final File file = new File("C:/Users/Desktop/ZipFile");
for (final File child : file.listFiles()) {
try {
ZipFile zipFile = new ZipFile(child);
if (extensionFilter.accept(child)) {
if (zipFile.isEncrypted()) {
//Your ZIP password
zipFile.setPassword("MYPASS!");
}
List fileHeaderList = zipFile.getFileHeaders();
for (int i = 0; i < fileHeaderList.size(); i++) {
FileHeader fileHeader = (FileHeader) fileHeaderList.get(i);
//Path where you want to Extract
zipFile.extractFile(fileHeader, "C:/Users/Desktop/ZipFile");
System.out.println("Extracted");
}
}
} catch (Exception e) {
System.out.println("Please Try Again");
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.