在我的代码中,我使用7z命令行提取存档
public static void extract() {
Runtime rt = Runtime.getRuntime();
try {
Process pr = rt.exec("7za x -o"+ tempFolderStr +" "+sourceStr);
pr.waitFor();
} catch (Exception e) {
e.printStackTrace();
out("Error extracting " + sourceStr);
quit();
}
//if tempFolder doesn't exists 7zip failed to extract for whatever reason
tempFolder = new File(tempFolderStr);
if (!tempFolder.exists()){
out("Error extracting " + sourceStr);
quit();
}
source = tempFolder;
}
但是,对于需要一段时间的大型存档来说,如果仅仅是吸引人的操作或挂起的是我自己的应用程序,那么对于用户来说可能并不明显(除了提取操作外,在提示用户执行之前,还有很多其他事情要做)再次执行任何操作),再加上提取本身可能会暂停,例如因为存档受密码保护或其他原因
出于这个原因,我希望7zip“接管”控制台并显示其进度输出,提示等提示,直到完成,然后将控制台返回给我的应用程序,有没有办法做到这一点?
最佳答案
不要使用Runtime.exec()
,请使用ProcessBuilder
和.inheritIO()
:
final List<String> command = Arrays.asList(
"7za", "x", "-o", tempFolder, sourceStr
);
final ProcessBuilder pb = new ProcessBuilder(command).inheritIO();
final int retcode = pb.start().waitFor();
等