テキスト書き込み後のClose処理について
こんにちはTamamoです。
テキストファイルをストレージに書き込んだ後はFile関連の命令はcloseするのが基本だと思います。
しかし、ネットの情報を見ているとcloseされていないコードが散見されます。
恐らくですが、いつかはGCされるからとか、サンプルコードだから良いか、
という考えで書かれていないのかもしれません。
しかし、私は書き込んだ後は必ずFile関連はcloseするようにしています。
ただ、closeを記述する場所を間違えると以下のような現象が時々ですが発生しました。
public void fileWrite(String str) { String filePath = Environment.getExternalStorageDirectory() + “/” + “sample.txt” try{ //出力ストリームのバッファリング //テキストデータをバッファに格納 //バッファのデータをファイルに書き込む //close処理 |
sample.txt(出力されたテキストファイル) 1,あいうえお 2,かきくけこ 3,さしすせそ 3,さしすせそ 4,たちつてと : : |
1秒ごとにテキストファイルに追記するプログラムだったのですが、
この例では3が重複して出力されてしまいました。ただ、重複しない時もあります。
恐らくですが、書き込み処理(close含む)が間に合わずに何らかの原因で
バッファにたまった情報が連続で書き込まれてしまったのではないかと考えられます。
そこで、①のようにclose処理をfinallyに書くようにします。
public void fileWrite(String str) { String filePath = Environment.getExternalStorageDirectory() + “/” + “sample.txt” try{ //出力ストリームのバッファリング //テキストデータをバッファに格納 //バッファのデータをファイルに書き込む fileOutputStream.close(); |
すると、重複するような現象は一切発生しなくなりました。
sample.txt(出力されたテキストファイル) 1,あいうえお 2,かきくけこ 3,さしすせそ 4,たちつてと : : |
finallyは例外が発生するしないに関わらず必ず実行するので、
closeが適切に処理ができるようになったのかもしれません。
finallyの大切さを感じました。
これは今後のノウハウとして役に立ちそうです。
火曜日担当:Tamamo
admin at 2018年03月06日 09:00:44