基本上我需要一個文本文件,如:在Java中,howd我通過線路在文本文件迭代從後到前
弗雷德
伯尼
亨利
和能夠從文件中讀取它們的順序爲
Henry
伯尼
弗雷德
我從閱讀的實際文件是> 30MB,這將是一個不完美的解決方案,以讀取整個文件,將它分成數組,扭轉數組,然後從去那裏。它需要太長時間。我的具體目標是找到第一次出現的字符串(在這種情況下,它是「InitGame」),然後返回該行開頭的位置。
我在python中做過類似的事情。我的方法是尋找文件的末尾 - 1024,然後讀取行,直到完成,然後從我以前的起始點開始尋找另一個1024,然後使用tell(),當我到達先前的位置時停止初始點。所以我會從文件尾部向後讀取這些塊,直到找到我正在尋找的文本。
到目前爲止,我有一段時間在Java中做這件事。任何幫助將不勝感激,如果你住在巴爾的摩附近,甚至可能會得到一些新鮮烘烤的餅乾。
謝謝!
更多信息:
我需要,因爲我讀的文件是一個遊戲,我的主機服務器的日誌文件向後搜索(它是| ERR |城市反恐服務器檢查出來)。日誌文件記錄遊戲中發生的每一個事件,然後我的程序將解析每個事件,處理它並對其進行處理(例如,它跟蹤人們的爆頭,並且會自動踢人的人) )。我需要重新搜索最近的InitGame條目,以便我可以實例化所有玩家對象,並處理自遊戲開始以來需要照顧的任何其他事物。文件中有數百個InitGame事件,但我想要最後一個。如果有更好的方法來做到這一點,不需要向後搜索,請讓我知道。
感謝
餅乾很誘人,但我不在巴爾的摩附近,所以沒有答案給你! ;)實際上,你還沒有明確說明你爲什麼要在文件中向後搜索。如果你不知道目標字符串總是接近尾聲,那麼相對於通過文件前向讀取來說,你正在經歷許多額外的工作。 Java中的seek/tell方法在算法上是相同的,你只需要一個能夠搜索的InputStream。 – msw 2010-04-03 16:05:48