使用Java时解压缩存档不起作用,适用于终端 - Linux

时间:2014-02-22 23:25:10

标签: java linux terminal zip unzip

我正在尝试解压缩/提取包含二进制文件的程序中提供的存档。 从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中使用命令时,只复制一个文件(甚至只走了一半),另一个文件完全被忽略了。

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

提前致谢!

1 个答案:

答案 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();
    }
}