「close処理最後に挟まないとだめだよ」と指摘を受けたので調べがてらメモに📝
bufferedreader/writerとは?
Javaにあるクラスの一つ、テキストファイルやCSVファイル取り込みや書きこみをやってくれる。
使用例
CSVからファイルを取り込んで1行ずつ処理する例
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("example.csv"));
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
String A = values[0];
String B = values[1];
String C = values[2];
//処理
//・・・
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
br.close();
}
}
}
}
でました最後の
br.close();
これを挟まないと最悪メモリリークを起こしてクラッシュしてしまうとか・・・
どうしてこんなことに?
bufferedreader/writerは自動でクローズ処理を行ってくれないのが原因らしい
外部ファイルを参照してそのまま開きっぱなし
→
他のプログラムが呼び出せない/メモリも枯渇する
→
🔥
おわりに
調べたところJava8からはtry-with-resources文ができ、そちらを使えばクローズ処理も自動で勝手にやってくれるのでコンパクトに書けるみたい。
きっともっと便利なライブラリとかいろいろあるだろうしもう少し調べてみたいね