2014-04-24 133 views
11

我目前正在嘗試從僅有文本的文件中讀取行。我發現在另一個stackoverflow(Reading a plain text file in Java),你可以使用Files.lines(..)。forEach(..) 但是我實際上不知道如何使用每個函數來逐行閱讀文本,任何人都知道在哪裏尋找或如何去做?如何使用Files.lines(...)forEach(...)讀取文件?

+0

這種方法已經被讀取文件的每一行,你可以存儲行的'String'變量和做其他事吧......呃 –

+0

,你應該閱讀有關Java 8和Lambda表達式;特別是在這裏,關於'Consumer'和單抽象方法的概念 – fge

回答

1

Files.lines(Path)預計Path參數並返回Stream<String>Stream#forEach(Consumer)需要Consumer參數。因此請調用該方法,並將其傳遞給Consumer。該對象將不得不被執行,以便爲每條線路做你想做的事情。

這是Java 8,因此您可以使用lambda表達式或方法引用來提供Consumer參數。 test.txt的

23

樣品含量

Hello 
Stack 
Over 
Flow 
com 

代碼從使用lines()forEach()方法這個文本文件中讀取。

import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.stream.Stream; 

public class FileLambda { 

    public static void main(String JavaLatte[]) { 
     Path path = Paths.get("/root/test.txt"); 
     try (Stream<String> lines = Files.lines(path)) { 
      lines.forEach(s -> System.out.println(s)); 
     } catch (IOException ex) { 
      // do something or re-throw... 
     } 
    } 
} 
+3

您可以使用方法引用:'System.out :: println',它仍然會被轉換爲相同的字節碼。 –

+1

還有一點:不應該將'Stream'存儲爲變量,因爲它可能會讓一些讀者使用它兩次或更多次,這是被禁止的。相反,你可以用'readAllLines'將它保存到'List'中,然後在這個列表中使用'stream()'方法。 –

+8

爲流使用try-with-resources以確保它自動關閉: 'try(流 lines = Files.lines(path)){' – odoepner

1

隨着的Java 8,如果文件存在於classpath

Files.lines(Paths.get(ClassLoader.getSystemResource("input.txt") 
        .toURI())).forEach(System.out::println); 
1

我已經創建了一個樣本,可以使用流過濾/

public class ReadFileLines { 
    public static void main(String[] args) throws IOException { 
     Stream<String> lines = Files.lines(Paths.get("C:/SelfStudy/Input.txt")); 
//  System.out.println(lines.filter(str -> str.contains("SELECT")).count()); 

//Stream gets closed once you have run the count method. 
     System.out.println(lines.parallel().filter(str -> str.contains("Delete")).count()); 
    } 
} 

樣品輸入。文本。

SELECT Every thing 
Delete Every thing 
Delete Every thing 
Delete Every thing 
Delete Every thing 
Delete Every thing 
Delete Every thing