【问题标题】:How to know if a file is closed using java Process如何使用java Process知道文件是否关闭
【发布时间】: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


【解决方案1】:

显然,这是不可能的。我不会走这条路。

这取决于特定的应用程序(记事本)打开文件。系统通常不知道应用程序何时停止查看文件。因为什么是关闭文件?它是否在查看器 UI 中关闭选项卡?或者清理应用程序为文件分配的内存?在关闭doc、xls文件的情况下删除锁定文件?

为此,您需要编写一个程序来控制操作系统和任何可以查看文件的应用程序。

【讨论】:

  • 不幸的是,我是这么想的。感谢您的回复。
猜你喜欢
  • 2014-09-08
  • 2014-03-03
  • 2010-11-02
  • 1970-01-01
  • 2012-09-21
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
相关资源
最近更新 更多