解压缩存档在使用 Java 时不起作用,在终端中工作 - Linux



我正在尝试解压缩/提取程序中提供的包含二进制文件的归档文件。从jar中复制到文件的操作很好,但当我尝试提取zip时,它意外返回,只复制了文件的一半,而完全忽略了另一个文件。

以下是更详细的描述:我正试图从程序的.jar中解压缩一个复制到文件夹中的档案。我用来解压的程序是"unzip"(Linux附带)。用于提取的命令是:

unzip -o <file>.zip

这正是我在以下代码中使用的:

ProcessBuilder process = new ProcessBuilder();
process.command("unzip", "-o", adb_tools.toString());
process.redirectErrorStream(true);
Process pr = process.start();
String line;
BufferedReader processReader = new BufferedReader(new InputStreamReader(pr.getInputStream()));
while ((line = processReader.readLine()) != null) 
log(Level.INFO, "Extracting Android Debugging Bridge: " + line, true);
log(Level.INFO, "Android Debugging Bridge has been extracted and installed to system. Marking files as executable...", true);
pr.destroy();
processReader.close();

当我直接通过终端使用该命令时,一切都很好,两个文件都被提取和膨胀,并且是可执行的,然而,如上所述,当我在Java中使用该命令,只有一个文件被复制(甚至只复制了一半),另一个文件完全被忽略。

如何使用不同的程序解决此问题并防止再次发生这种情况?

提前感谢!

如果您需要在Java中执行一项常见任务,那么总会有一个库比您自己做得更好。因此,使用外部库进行解压缩。点击此处:

什么是一个好的Java库来压缩/解压缩文件?

看起来你可以这样使用zip4j(来自djangofan的回答):

public static void unzip(){
String source = "some/compressed/file.zip";
String destination = "some/destination/folder";
String password = "password";
try {
ZipFile zipFile = new ZipFile(source);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
}

最新更新