我正在尝试解压缩/提取我的程序中提供的包含二进制文件的存档。 从 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 完成一项常见任务,总有一个库可以比您自己更好地完成您需要的任务。所以使用外部库解压。在这里检查:
What is a good Java library to zip/unzip files?
看起来你可以像这样使用 zip4j(来自 djangofan's answer ):
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();
}
}
关于java - 使用 Java 时无法解压缩存档,但可以在终端 - Linux 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21962030/