如何有效地跟踪Java中的更改(以及最重要的读取)真正的大文件

时间:2014-06-27 10:00:29

标签: java file file-io bigdata

我有一个由第三方应用程序创建的文本形式的大日志文件。不幸的是我的文件是150MB,其他人可能有更大的文件,这取决于他们开始记录的日期。由于该文件是由第三方应用程序创建的,因此我无法以任何方式对其进行修改(例如删除其中一些最旧的内容)。

我想要做的是跟踪文件大小,并在添加新行时通知(因此文件的大小被更改),然后读取此行(它将是最后一行)。< / p>

我知道当我想要跟踪更改时,它不一定是一个不断更新,但是当用户在托盘中最小化应用程序时。基本上,我想在用户看不到应用程序状态时通知用户。

现在我正在使用

跟踪文件大小的差异
File file = new File("filepath"); 
file.length();

据我所知,这并没有将文件加载到内存中,因此性能下降并不是很大。

如果我是对的阅读该文件last line的最有效方法是什么?

将效率替换为&#34;尽可能降低性能&#34;。我不介意在记录到文件的实际事件和收到通知的用户之间有2到3秒的延迟。

1 个答案:

答案 0 :(得分:2)

您可以使用DirectoryWatcher通知目录或文件的更改。您可以使用RandomAccessFile风向任何位置,例如在那里读取最后一个字节,并从该点读取字节。如果您特别关心编码,可以使用不推荐使用的readLine()方法。

否则我建议你将整行复制到缓冲区,例如ByteArrayOutputStream并使用正确的编码对其进行解码。

你想要先复制的原因是你得到的是不完整的行甚至不完整的多字节字符,这是Bufferedreader特别不能处理的。