我正在尝试解压缩/提取包含二进制文件的程序中提供的存档。 从jar到文件的副本工作得很好,但是当我尝试解压缩时,它会意外返回并只复制文件的一半,并完全忽略另一个文件。
这里有更详细的描述: 我正在尝试从程序的.jar中解压缩复制到文件夹的存档。 我用来解压缩的程序是“解压缩”(随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中使用命令时,只复制一个文件(甚至只走了一半),另一个文件完全被忽略了。
我如何解决这个问题,并使用不同的程序再次防止这种情况发生?
提前致谢!
答案 0 :(得分:1)
如果您需要在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();
}
}