java - 在Java中,如何从后到前迭代文本文件中的行

标签 java file fileinputstream

基本上我需要获取一个文本文件,例如:

Fred
Bernie
Henry

并能够按照

的顺序从文件中读取它们

Henry
Bernie
Fred

我正在读取的实际文件>30MB,读取整个文件、将其拆分为一个数组、反转数组,然后从那里开始,这将是一个不太完美的解决方案。这需要太长的时间。我的具体目标是找到字符串的第一次出现(在本例中为“InitGame”),然后返回该行开头的位置。

我之前在 python 中做过类似的事情。我的方法是寻找文件的末尾 - 1024,然后读取行直到到达末尾,然后从我之前的起点寻找另一个 1024,并且通过使用tell(),当我到达前一个位置时我会停止初始点。因此,我会从文件末尾向后读取这些 block ,直到找到我要查找的文本。

到目前为止,我在 Java 中做这件事很开心。任何帮助将不胜感激,如果您住在巴尔的摩附近,您甚至可能会得到一些新鲜出炉的 cookies 。

谢谢!

更多信息:

我需要向后搜索,因为我正在读取的文件是我托管服务器的游戏的日志文件(这是关于城市恐怖的 |err| 服务器。检查一下)。日志文件记录了游戏中发生的每个事件,然后我的程序将解析每个事件,处理它,然后对其采取行动(例如,它会跟踪人们的爆头,并且还会自动踢掉那些被d-bags的人) )。我需要搜索回最新的 InitGame 条目,以便可以实例化所有玩家对象并处理自游戏开始以来需要处理的任何其他事情。文件中有数百个 InitGame 事件,但我想要最后一个。如果有更好的方法不需要向后搜索,请告诉我。

谢谢

最佳答案

您可以使用 RandomAccessFile 重复您的 Python 解决方案,并且可以是其之上的 LineNumberReader(或只是 Reader)的自定义子类。

关于java - 在Java中,如何从后到前迭代文本文件中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571758/

相关文章:

javascript - 如何在导入JSP中获取主机协议(protocol)

java - 如果密码不正确,则登录尝试存储到数据库中

Java-Selenium : Eclipse is unable to find my file, 但我的文件位于其工作目录中

java - NullPointer 异常和 FileInputStream

java - Apache Commons Math 的标准偏差

java - 如何将异步任务与现有代码一起使用

java - 服务器使用 Spring-MVC 运行后,无法提供添加到我的文件系统中的文件

python - 你能用 open(fname, 'a+' ) 从文件中读取第一行吗?

C 从文件中读取文本并将其放入数组中

java - 重用文件输入流