在我的代码中,我使用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“接管”控制台并显示其进度输出,提示等等直到它完成然后将控制台返回到我的应用程序,有没有办法做到这一点?
答案 0 :(得分:1)
请勿使用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();
等等