Java中的文件操作

时间:2011-12-06 06:09:43

标签: java

我有Java文件阅读器对象。

当我们加载文件时,加载整个文件或只加载文件指针,因为我有应用程序(生产者),它继续写入文件,其他应用程序(消费者)将开始读取几分钟后的文件,我想读取将由应用程序生产者编写的所有文件数据。

我试图搜索但无法得到答案。

3 个答案:

答案 0 :(得分:1)

FileReader的工作方式与FileInputStream非常相似,后者的工作方式与C模拟类似 - 当您第一次打开文件时,实际上会立即加载很少的数据。文件的内容通常不会被读取,直到您首先read其中一些,此时运行时读取足以填充请求,或者如果您正在使用BufferedReader(可能加上足够的填充)一个块,取决于操作系统和JVM)。

当我说它“像它的C模拟一样”时,我的意思是。打开FileReader进行阅读,打开FileWriter进行书写。将文件打开以便同时进行读写可能会出现问题。 Windows尤其不太喜欢它。如果你关心可移植性,你可能想找到另一种方式 - alphazero's answer听起来很有希望,但我从未尝试过。

答案 1 :(得分:1)

最佳和规范的方法是使用Java NIO memory mapped files。在每次写入时使用MappedByteBuffer.force()以确保使用者进程刷新脏页文件。消费者(如果需要,在其他过程中)可以在读取模式下映射相同的文件。

答案 2 :(得分:0)

当你写下“我们加载文件时”时,我不明白你的意思。示例代码在这里会有所帮助。请参阅How to Ask

如果您在Reader上调出任何听起来像“读”的内容,那么您的内存中就会有数据。如果这是文本数据(假设您使用的是FileReader),那么最好使用BufferedReader。它不仅可以缓冲,而且更方便文本文件。

如果我的答案都错了,请发一些代码,以便我知道你在说什么。欢迎!