Stream<String>
として取得する方法以下の例はFiles#lines
を使用して、入力ファイルの中身を1行ずつ読み取る例です。
Files#lines
を使用してテキストファイルの内容をStream<String>
として取得すると、ストリームAPIを用いて処理することが出来るようになります。
1行ずつ読み取るため、メモリ使用量を抑えることが出来ます。
Java
public static void main(String args[]){
try(Stream<String> stream = Files.lines(Paths.get("C:\\workspace\\sample\\textA.txt"))){
stream.forEach(System.out::println);
}catch(IOException e) {
e.printStackTrace();
}
}
実行結果
1行目のテキスト
2行目のテキスト
3行目のテキスト
ファイルの中身を1行ずつ読み取る際に文字コードを指定して実行したい場合はFiles#lLines
の第二引数にCharset
型をセットします。
Java
Charset cs = Charset.forName("UTF-8");
Stream<String> stream = Files.lines(Paths.get("C:\\workspace\\sample\\textA.txt"), cs)
List<String>
として取得する方法以下の例はFiles#readAllLines
を使用して、ファイルの中身を一括して読み取る例です。
Files#readAllLines
を使用すると、テキストファイルの内容をList<String>
としてまとめて取得できます。
Java
public static void main(String args[]){
try {
List<String> list = Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"));
for(String s:list){
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
実行結果はStream<String>
のときと同じです。
実行結果
1行目のテキスト
2行目のテキスト
3行目のテキスト
ストリーム操作を行いたい場合は、以下のように.stream()
から続けることが可能です。
Java
public static void main(String args[]){
try {
Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"))
.stream().forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
文字コードを指定して実行したい場合はFiles#readAllLines
の第二引数にCharset
型をセットします。
Java
Charset cs = Charset.forName("UTF-8");
Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"),cs)
List<String>
で受け取った結果をストリーム操作して再びList<String>
型に戻す方法ストリーム操作した後に再度List<String>
型に戻すには、
終端操作として.collect(Collectors.toList())
を実行します。
以下の例は、ストリーム操作して末尾に「です。」を付与して、再度List<String>
型に戻しています。
Java
public static void main(String args[]){
try {
List<String> list = Files.readAllLines(Paths.get("C:\\workspace\\sample\\textA.txt"))
.stream()
.map(s -> s + "です。")
.collect(Collectors.toList());
for(String s:list){
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
実行結果
1行目のテキストです。
2行目のテキストです。
3行目のテキストです。
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!