2011-03-07 54 views
0

如果您不知道该文件与哪个应用程序相关联,那么如何从Java应用程序编辑文件。另外,因为我使用的是Java,所以我更喜欢独立于平台的解决方案。外部应用程序关闭后,我想将修改写回文件。编辑文件是一个本地临时文件。真正的文件保存在服务器上,存档或其他任何文件中。用Java中的外部应用程序编辑文件并回写?

我现在可以使用类Desktop打开文件进行编辑。但是,如何检测文件是否关闭。

+0

如果保存,外部应用程序将写回文件。您的Java应用程序不需要将其写回。我不明白你的问题。 – jzd 2011-03-07 15:34:19

+0

@jzd - 我已经提出了更清晰的问题(我希望)。由于内容未保存在本地文件系统中,因此为编辑操作创建了临时副本。 – Horcrux7 2011-03-07 15:44:02

回答

1

在这种情况下,其中外部应用程序是未知的,而不是从你调用java应用程序,那么你可以创建一个恶魔线程。我假设你的应用程序知道文件的位置。这个恶魔线程可以检查文件上的任何锁定,以及释放锁定时最后更新文件的时间。如果上次更新的时间发生变化,您知道文件已更改。

另一种选择可能是使用第三方api,比如apache的FileListener,这在内部也有类似的事情。

+0

如何在不创建文件锁的情况下检查任何锁?如果我创建文件锁,那么外部应用程序可能会有问题。 – Horcrux7 2011-03-08 07:12:48

+0

您可以使用java.nio中的FileChannel.tryLock()。请参阅[FileChannel](http://download.oracle.com/javase/1.5.0/docs/api/java/nio/channels/FileChannel.html#tryLock()) – Amit 2011-03-08 11:59:47

0

我不确定你的意思是'外部应用程序关闭后,我想把更改写回文件。'

如果你只是想等待外部应用程序完成,您可以改用长:

 

Process p = Runtime.getRuntime.exec("mycommand"); 
p.waitFor() 
 
+0

是的,我确实想知道外部应用程序是否完成。但我不知道用于编辑的应用程序。它可以是多种文件,如图像,办公文档,源文件,日志文件等。 – Horcrux7 2011-03-07 15:46:31