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"));
Thanks in advance
解决方案
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("");
}
}
You might also want to consider Apache Commons Compress which provides read support for 7zip