Java8入門:簡単なファイル入出力
前回のNIO.2の続きで、簡単にファイル入出力ができるようになったので試してみた。
サンプルコードは、以下に置いている。
Sample/SimpleReadWrite.java at master · eiKatou/Sample
JavaDocは以下。
Files (Java Platform SE 8 )
BufferedReader, BufferedWriterを使う
ファイルの入出力で使うBufferedReader, BufferedWriterは、Filesクラスから取得できるようになった。
try (BufferedReader reader = Files.newBufferedReader(fooPath)) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
try (BufferedWriter writer = Files.newBufferedWriter(fooPath)) {
writer.append("abc");
writer.newLine();
writer.append("def");
writer.newLine();
}
上記のサンプルでは、try-with-resouces文で自動でクローズしている。Exceptionは上に投げているので、あえてcatchしていない。今までに比べてシンプルに書けるようになった。
Filesクラスのメソッドを使う
Filesクラスのメソッドを使う方法もある。
ファイル書き込み
リストで文字列を持っておき、ファイルに書き込む。
List<String> lines = Stream.of("123", "ccc").collect(Collectors.toList());
Files.write(fooPath, lines, CREATE, WRITE, APPEND);
writeメソッドの第3引数以降は、java.nio.file.StandardOpenOptionの定数を渡す。static importしておくのがおすすめ。
ファイルの読み込み
ファイルの読み込みは、readAllLinesとlinesの2つのメソッドがある。どちらもファイルを読み込んで、Streamで返してくれる。
// ファイルの読み込み(Close処理は不要)
Files.readAllLines(fooPath).forEach(System.out::println);
// ファイルの読み込み(Close処理が必要!)
try (Stream<String> fileLines = Files.lines(fooPath)) {
fileLines.forEach(System.out::println);
}
readAllLinesは、ファイル内容を全てメモリに保持するため、大きなファイルの読み込みは使わない方がいい。
linesはクローズ処理が必要である(忘れそう・・)。これからはFiles.linesメソッドを中心に使っていくことになるだろう。
文字コードを指定することができるメソッドは、可能な限り文字コードを指定しておいた方が良い。
投稿日 2017年10月15日