Java 生成外部编辑器-这是如何工作的?

Java 生成外部编辑器-这是如何工作的?,java,unix,Java,Unix,程序(如命令行实用程序)生成外部编辑器并读回文件更改的典型设计是什么?许多命令行实用程序都这样做。例如,svn commit启动一个外部编辑器,以获取在没有-c的情况下运行的注释 我考虑过的一些选择是: 轮询临时文件,等待时间戳更改,但这将限于一次保存 向操作系统注册以获得临时文件更改的通知,但这将取决于平台,我希望避免这种情况 监视生成的进程,等待它终止,但我不确定这对于TextMate和TextWrangler等通常具有长寿命进程的编辑器是如何工作的 通过stdin和stdout与生成的进

程序(如命令行实用程序)生成外部编辑器并读回文件更改的典型设计是什么?许多命令行实用程序都这样做。例如,
svn commit
启动一个外部编辑器,以获取在没有
-c
的情况下运行的注释

我考虑过的一些选择是:

  • 轮询临时文件,等待时间戳更改,但这将限于一次保存
  • 向操作系统注册以获得临时文件更改的通知,但这将取决于平台,我希望避免这种情况
  • 监视生成的进程,等待它终止,但我不确定这对于TextMate和TextWrangler等通常具有长寿命进程的编辑器是如何工作的
  • 通过stdin和stdout与生成的进程进行交互,但我不清楚如何/是否可以工作
希望解决方案是独立于平台的。我的平台是OSX上的JVM


附:关于这个问题的适当标记有什么建议吗?

如果您通过Java(Runtime.exec)启动一个流程,您会得到一个流程对象,它有一个()方法,可以告诉您流程何时完成


只要通过它运行vi或nano或任何东西,一旦退出,您就可以读取文件。

确保编辑器不会进入后台并立即返回。如果是这样的话,应该有一个命令行选项来停止它。检查
编辑器
环境变量是一种很好的方式,它包含用户首选的编辑器。