使用 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