一. 題目
Given the code fragment:
A. List<String> fc = Files.list(file);
fc.stream().forEach (s -> System.out.println(s));
B. Stream<String> fc = Files.readAllLines (file);
fc.forEach (s -> System.out.println(s));
C. List<String> fc = readAllLines(file);
fc.stream().forEach (s -> System.out.println(s));
D. Stream<String> fc = Files.lines (file);
fc.forEach (s -> System.out.println(s));
二. 題解
1. Paths.get()方法,把一個路徑字串轉換成 Path物件
取得含有course.txt字串的 Path物件,並參考到變數file。
2. 變數file傳入 Files.line()方法,這個方法把傳進來的 Path物件,找到對應的檔案(File),解析裡面的內容,並回傳一個泛型為 String的 Stream物件
參考到變數 fc
3. fc.forEach()把 Stream裡面的檔案內容印出來,正確答案為(D)。
(A)
Files.list回傳值為 Stream<Path>,與型態 Stream<String>不相符,錯誤。
(B)
Files.readAllLines()回傳值為 List<String>,與型態 Stream<String>不相符,錯誤。
(C)
readAllLines()前面沒有變數,錯誤。
(D) 正確答案。
※查 Files API時,意外發現有版本上的不同,列出差異
沒有Files.lines()方法 → https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
有Files.lines()方法 → https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html
三. 參考
Paths API: https://docs.oracle.com/javase/7/docs/api/java/nio/file/Paths.html
Files API: https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html