我正在编写一个类,它将在更新时从日志文件中读取行。
我正在使用 Apache VFS2 来获取更新文件时调用的方法。我的主要问题是,如果该行尚未完成,我不想从文件中读取该行,因为它的末尾确实有一个“\n”或“\r”行分隔符类型字符。我想我已经查看了所有可以读取行的 Java 库,但它们都丢弃了 EOF 和行终止信息,所以我认为我不能使用它们。
相反,我正在查看逐字节读取它,然后检查结果以丢弃最后一行分隔符之后的所有内容。我想知道你们对执行此操作的最佳方法有何看法。
例如:
2013-Jul-01_14:07:17.875 - Connection to Message Bus is reestablished<LF>
2013-Jul-01_14:07:17.875 - Connection to Message Bus is reestablished<LF>
2013-Jul-01_14:15:08.205 - No connection to Message Bus - reestablish before we can publish<LF>
2013-Jul-01_14:15:08.205 - NOT A REAL LINE PLEASE DONT READ
我想阅读前 3 个而不是第四个,因为它没有换行符或回车符 ()。
我看过 Apache commons-io Tailer 的东西,但我不知道这是否会给我“不完整”的行(我意识到我必须放弃 VFS2 的东西才能使用它)。
所以伪代码:
private void ingestFileObject(FileObject file) {
BufferedInputStream bs = new BufferedInputStream(file.getContent().getInputStream());
StringBuilder result = new StringBuilder();
while (bs.available() > 0) {
result.append((char) bs.read());
}
bs.close();
String resultString = result.toString();
//determine what part of resultString is after last carriage return/line seperate (using regex [\\r\\n]+?
//remove the offending part of String.
}
或者在这一点上也欢迎任何其他完全忽略我的伪代码的解决方案......
谢谢