サーバ側の処理でファイルへの出力処理を書くことは多いかと思います。
今回はJava8でファイルへの出力処理を書くとどうなるかを解説していきます。
僕のプロフィールはこちら
Java8でのファイル出力処理
早速ソースコードを記載しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; public class FileSample { public static void main(String[] args) throws IOException { try (FileOutputStream fileOutputStream = new FileOutputStream(new File("file")); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8"); PrintWriter out = new PrintWriter(new BufferedWriter(outputStreamWriter));) { //ファイルへ出力する内容をリストに詰める List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); //ラムダ式でファイルへリストの内容を出力する list.forEach(str -> { out.println(str); out.println("/r/n"); }); } catch (IOException e) { throw e; } } } |
解説
まず、FileOutputStreamを宣言します。FileOutputStreamはファイルへ出力するためのストリームです。
1 |
FileOutputStream fileOutputStream = new FileOutputStream(new File("file")); |
次に、OutputStreamWriterの引数に先ほど作成したFileOutputStreamを渡します。第2引数には文字コードを指定します。
1 |
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8"); |
最後に、先ほど作成したOutputStreamWriterをPrintWriter の引数として渡します。これによって、ファイルへ書き込むための準備は完了です。
1 |
PrintWriter out = new PrintWriter(new BufferedWriter(outputStreamWriter)); |
ファイルを扱う場合、クローズ文を書かなくてはならないですが、今はtry with resources文というものがあります。今回もそれを使用しているため、わざわざクローズ文は書いていません。
※try with resources文は自動的にクローズが行われるのでコードが簡潔になります。
ファイルへの出力はラムダ式を使用します。リストや配列などの内容を扱う場合はラムダ式を使用するとコードがシンプルで分かりやすくなります。
1 2 3 4 |
list.forEach(str -> { out.println(str); out.println("/r/n"); }); |
まとめ
ファイルの出力は、いつも「どうやって書くんだっけ?」と考えてしまいますよね。
Java7から今までfinallyで書いていたclose文などを書く必要がなくなりましたし、Java8からはラムダ式を使用できるので、オブジェクトの内容を出力する際もfor文を書く必要がなくなりました。
こういうものは書いていかないと覚えないので自分の備忘録としても残しておきたいと思います。何かの役に立てれば幸いです。