【发布时间】:2020-05-21 09:41:24
【问题描述】:
我正在执行此命令以使用默认文件查看器打开日志文件:
Process p = Runtime.getRuntime().exec("rundll32 url.dll, FileProtocolHandler F:/Download/MSI3ca79.LOG");
我想知道文件何时关闭。有可能吗?
p.waitFor(); // doesn't work because the process is terminated just after the execution.
解决方案:
ProcessBuilder pb =
new ProcessBuilder("c:/windows/notepad.exe", "F:/Download/MSI3ca79.LOG");
File log = new File(LogFactory.getLogFactory(TestExternProcess.class).getName()); pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));
Process p = pb.start();
int exitVal = p.waitFor();
【问题讨论】:
-
1) 不要在问题中添加称呼或签名。 2) 另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用
exec并使用ProcessBuilder创建进程。还将String arg拆分为String[] args以解决包含空格字符的路径之类的问题。 -
.. 3) “使用默认文件查看器打开日志文件” 我会改用
Desktop.open(File)。 -
这里的代码正在运行
ProcessBuilder pb = new ProcessBuilder("c:/windows/notepad.exe", "F:/Download/MSI3ca79.LOG"); File log = new File(LogFactory.getLogFactory(TestExternProcess.class).getName()); pb.redirectErrorStream(true); pb.redirectOutput(Redirect.appendTo(log)); Process p = pb.start(); int exitVal = p.waitFor(); -
很高兴你把它整理好了。 :) 现在您可以 1) 删除问题,或者(最好)2) 输入下面的解决方案,并在网站允许时选择它作为答案。
标签: java file process runtime.exec