【问题标题】:Unzipping an archive won't work when using Java, works in Terminal - Linux使用 Java 时无法解压缩存档,可在终端 - Linux 中使用
【发布时间】:2014-02-22 23:25:09
【问题描述】:

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

这里有更详细的描述: 我正在尝试从程序的 .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 中使用命令时,只有一个文件被复制(甚至只进行了一半),而另一个文件被完全忽略。

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

提前致谢!

【问题讨论】:

    标签: java linux terminal zip unzip


    【解决方案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();
        }
    }
    

    【讨论】:

    • 酷,谢谢。非常感激。我想我不妨使用 Linux 提供的工具,因为这是一个仅限 Linux 的项目,但我猜你是对的!感谢您的链接!
    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 2010-10-13
    • 2014-10-08
    • 2011-08-29
    • 2010-10-12
    • 2012-01-28
    • 2022-11-11
    • 2016-07-29
    相关资源
    最近更新 更多