使用 7zip 解压缩特定文件夹的命令

使用 7zip 解压缩特定文件夹的命令

问题描述:

更具体地说,我正在使用 Windows,我正在使用 process 和 getRuntime().exec() 从 java 程序调用 cmd 命令.我尝试了诸如 -r 之类的选项,但它不起作用.我试过代码行

I am working with windows to be more specific, I am invoking the cmd Command from java program using process and getRuntime().exec(). I tried options like -r but its not working. I tried the code line

Process proc = prog.exec(System.getenv("ProgramFiles").concat("\7-Zip\7z x " + """+inputZIPFile+"""+ " -o"+outputFolder+"SpecificFolder\* -r"));

提前致谢

从使用 ProcessBuilder 开始.它可以更好地处理带空格的参数,并允许您执行诸如重定向输出流和指定命令的起始目录之类的操作...

Start by using ProcessBuilder instead. It handles parameters with spaces better and allows you do things like redirect the output stream and specify the starting directory for the command...

public static void main(String[] args) {
    ProcessBuilder pb = new ProcessBuilder(
        System.getenv("ProgramFiles") + "/7-Zip/7z.exe",
            "x",
            inputZIPFile,
            "-o" + outputFolder+"/SpecificFolder",
            "-r"
    );
    pb.redirectError();
    try {
        Process p = pb.start();
        new Thread(new InputConsumer(p.getInputStream())).start();
        System.out.println("Exited with: " + p.waitFor());
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

public static  class InputConsumer implements Runnable {
    private InputStream is;

    public InputConsumer(InputStream is) {
        this.is = is;
    }

    @Override
    public void run() {
        try {
            int value = -1;
            while ((value = is.read()) != -1) {
                System.out.print((char) value);
            }
        } catch (IOException exp) {
            exp.printStackTrace();
        }
        System.out.println("");
    }

}

您可能还想考虑 Apache Commons Compress,它为 7zip 提供读取支持

You might also want to consider Apache Commons Compress which provides read support for 7zip