2017-09-01 72 views
0

以下是文件內容:讀取文件的Java 8

line 1 
line 2 
line 3 
line 4 
line 5 

現在我想讀以相反的順序串的文件,如下

line 5 
line 4 
line 3 
line 2 
line 1 

我用它來閱讀代碼逐行文件是

try (Stream<String> steam = Files.lines(Paths.get("C:\\..\\..\\taxreport.txt")).skip(1)) { 
    steam.foreach(i->System.Out.Println(i)); 
} 
catch (IOException ex) { 
    System.out.println(RED_BOLD + "File not Found !!"); 
} 

代碼以正常順序逐行讀取文件。但我想按相反的順序閱讀該行。

任何人都可以讓我知道如何以相反的順序讀取行。

+3

的可能的複製[如何讀取最終文件中的Java啓動(以相反的順序)?] (https://stackoverflow.com/questions/8664705/how-to-read-file-from-end-to-start-in-reverse-order-in-java) – soorapadman

+1

[Java 8流反向順序]的可能重複(https://stackoverflow.com/questions/24010109/java-8-stream-reverse-order) – Jotunacorn

+2

你需要重新d文件,將其存儲在LIFO集合中,然後閱讀該集合。您並沒有真正的「簡單」方法來將光標定位到文件中。所以這將在記憶中完成。 – AxelH

回答

1

這適用於字符串:

steam.collect(Collectors.toCollection(LinkedList::new)) 
    .descendingIterator().forEachRemaining(System.out::println); 

這是使用ArrayList另一個例子:

List<String> list = steam.collect(Collectors.toCollection(ArrayList::new)); 
    Collections.reverse(list); 
    list.forEach(System.out::println); 
+0

我們能不能在這裏使用Stack? –

+0

@HimanshuBhardwaj我不確定你的意思,但我又添了一個例子。 –

+0

忽略我,在這裏找到了我的問題的答案。 https://stackoverflow.com/questions/30387579/stack-using-the-java-8-collection-streaming-api –