用于基于文件的进程通信的Java文件locking机制

我有两个Java进程(JAR),每隔1分钟向一个文本文件写入数据,另一个正在读取该文件并调用Web服务以将数据存储在数据库中。

有什么办法来locking文件,当它在写模式? 我已经观察到,当wvdial拨号调制解调器时,它创build/var/lock/ttyUSB0..LOCK我想locking文件。 我想要一个这样的程序,如果文件处于写入模式,另一个进程可以等到写入完成。 写入过程后可以读取文件内容。

请指导我解决我的问题。

谢谢

Solutions Collecting From Web of "用于基于文件的进程通信的Java文件locking机制"

也许这个班可以帮助你http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html

编辑:这篇文章可能已经覆盖了主题如何锁定一个文件使用Java(如果可能)

例:

 FileInputStream in = new FileInputStream(file); try { java.nio.channels.FileLock lock = in.getChannel().lock(); try { //write } finally { lock.release(); } } finally { in.close(); } 

现在在阅读过程中:

 FileInputStream in = new FileInputStream(file); try { FileLock lock = in.getChannel().tryLock(); if (lock == null) { //file is locked, wait or do something else } else { try { //read } finally { lock.release(); } } } finally { in.close(); } 

你在这里遇到的问题是Java不能用O_EXCL open() ,结果你不能自动创建一个文件。

改用一个目录:创建一个目录是一个原子操作。 如果无法创建目录, File.mkdir()将返回false。 rmdir()它,当你完成。

当然,确保你的两个进程都有对基本目录的写权限!