读取仍由其他程序写入/复制的文件

时间:2014-07-09 17:50:00

标签: java file-io

我有一个文件监视器应用程序,它在文件夹中创建新文件时通知我的java类。我有一个cronjob,只要文件准备就可以将文件复制到文件夹中。这些文件很庞大(3000万行),因此复制文件需要一段时间才能完成。但是我的文件监视器应用程序会在创建文件后立即通知,因此在代码抛出IOException后的情况下

BufferedReader br = new BufferedReader(new FileReader(file));

有没有办法可以在“读取”模式下打开文件,这样当文件被其他东西使用时它不会崩溃?我看到了类似的问题here,但没有好的答案。这似乎是java支持的一个简单的用例,但我找不到解决方案。

1 个答案:

答案 0 :(得分:0)

不确定您对写入文件的进程有多少控制权。但您可能希望使用约定来帮助您的文件轮询过程知道文件何时完全写入。

一些公共惯例。

  • 使用数据写入文件,然后写入另一个具有相同名称和.rdy扩展名的空文件。轮询器查找rdy文件,然后使用名称查找真实文件。

  • 使用扩展名为.tmp或.writing的数据编写文件,然后在写完所有数据后重命名。轮询器忽略扩展名为.tmp(或.writing)的文件。