2014-02-17 25 views
1

我試圖實現一個日誌結構文件系統作爲操作系統分配。其中最新的數據放在文件的末尾。這就是爲什麼我要閱讀文本文件「逐行」逆序。可能嗎?如何在Java中以自下而上的方式讀取文本文件?

+3

等等,爲什麼這是從頭到尾讀的理由? –

+0

您可能需要自己動手:找到文件末尾,然後向後掃描換行符。 – jia103

+0

@DaveNewton:因爲在基於日誌的文件系統(使用一次寫入策略)中,新數據和修改後的數據存儲在已寫入數據的末尾。在我的情況下在文件結束。 – Shaban

回答

3

退房ReverseLineInputStream:

https://code.google.com/p/lt2-sander-marco/source/browse/src/leertaak2/ReverseLineInputStream.java?spec=svn15&r=15

它指SO發佈的問題How to read file from end to start (in reverse order) in Java?

in = new BufferedReader (new InputStreamReader (new ReverseLineInputStream(file))); 

while(true) { 
    String line = in.readLine(); 
    if (line == null) { 
     break; 
    } 
    System.out.println("X:" + line); 
} 

(謝謝,@Mark O'Donohue)

+0

令人印象深刻,我甚至不知道有這樣一個類:D +1 – BruceWayne

-1

是的,但它需要先讀取整個文件。如果文件很長,可以做的是將文件分成幾個文件,將每個文件讀入內存,然後將數據寫入新文件,從最後一行到舊文件的第一行。操作完成後,您可以刪除您創建的所有臨時文件。

+0

爲什麼downvote? –

+0

我猜想,因爲這兩種解決方案是錯誤的(你不需要讀整個文件)或怪異的(爲什麼會有多個臨時文件?) –

+0

當你需要通過文件到最後一行時你掃描它。如果原始文件很長,多個文件的原因是爲了減少在內存中存儲行的開銷。 –

1

如果它的一行行 - 你可以通過所有的行成一個ArrayList,然後使用反向for循環讀取它的背景,如for(int i = list.size()-1;i>=0;i--)

+0

好,但如果文件很長,仍然可能會給內存帶來沉重的負擔。 –

相關問題