java - 使用 Java 时无法解压缩存档,但可以在终端 - Linux 中使用

标签 java linux terminal zip unzip

我正在尝试解压缩/提取我的程序中提供的包含二进制文件的存档。 从 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/

相关文章:

ubuntu - 替换终端中的字符

linux - 当您在过程中按终端中的向右箭头时,会显示 "^[[C"。到底是什么意思?

java - BouncyCaSTLe:从证书签名请求中提取公钥信息

java - Java 正则表达式和单词列表

java - Google Chrome 扩展和应用程序开发

android insmod init_module 失败(所需 key 不可用)

linux - 为什么在rsync之后,文件夹的源和目标大小不同?

java - 查找所有方法调用

linux - split命令在文件名末尾添加 "?"

macos - .profile 无法在 Mac 的终端上运行