如何创建和编写文件一个Java进程并从另一个进程读取而不会遇到读/写问题(Java/EE)

rip*_*her 1 java file-io multithreading file process

我的情况

我有一个进程,它执行FTP和另一个电子邮件的过程.

当我完成FTP时,我想通过电子邮件发送成功通知.因此,电子邮件进程正在监视新的文件pr配置文件以进入特定目录

FTP进程创建一个适合电子邮件进程的文件,该文件或多或少是属性文件中的电子邮件列表.

我面临的问题是我创建文件并编写它.电子邮件进程,用于检测新文件并在写入文件之前或之后读取该文件.因此它只访问空参数.虽然我可以在电子邮件处理过程中进行睡眠,但它不适用于所有情况,并且会阻碍已完成文件的其他人.

我可以使用什么来创建一个无法读取的属性文件,直到它完全写入 - 或创建一个带锁的属性文件,如果需要可以从另一个进程解锁.

我有什么选择?

到目前为止: - 我已经尝试使用apache commons配置setProperty它创建了相同的旧读/写访问问题 - 我创建了一个property = new属性并使用store方法来创建文件.即使这样,电子邮件流程也会在完全播放之前阅读

仅供参考:电子邮件流程具有WatchDirectory,并在创建新文件时读取.

Mar*_*ten 5

您需要对文件系统执行"原子"操作.将文件写入另一个文件名(例如.tmpfoobar),当您完成后,关闭它并执行a File.renameTo()将其移动到位.重命名是原子的.