PrintWriterのclose処理
Posted: 2015年2月14日(土) 13:29
お世話になります。
毎回初歩的な質問で申し訳ないのですが、
Javaのファイル出力処理でPrintWriterを使うことは珍しくないと思います。
例えば、before.txtをafter.txtにコピーする単純なプログラムだと以下のような感じになると思います。
このとき、Buffered〜系のクラスはclose処理でIOExceptionが発生する可能性がありますよね。
でも、BufferedWriterをPrintWriterでラップすると、close処理でIOExceptionがthrowされなくなります。
PrintWriterのclose内で良きに計らってくれていると信じていたのですが、よく考えると疑問で
PrintWriterのclose内でBufferedWriterがcloseされるとき、そこではIOExceptionが発生する可能性があるわけで、
発生した場合に何か例外処理したいとすると、どうコーディングすればいいのか疑問に思いました。
素直にBufferedWriterは専用の変数に格納して、明示的にclose→例外処理するしかないのでしょうか。
# これ以上try-catch増やしたくないのですが。。。
毎回初歩的な質問で申し訳ないのですが、
Javaのファイル出力処理でPrintWriterを使うことは珍しくないと思います。
例えば、before.txtをafter.txtにコピーする単純なプログラムだと以下のような感じになると思います。
public class Copy {
public static void main(String[] args) {
BufferedReader reader = null;
PrintWriter writer = null;
try {
reader = new BufferedReader(new FileReader("before.txt"));
writer = new PrintWriter(new BufferedWriter(new FileWriter("after.txt")));
String line = null;
while ((line = reader.readLine()) != null) {
writer.println(line);
}
} catch (FileNotFoundException e) {
/* 適宜例外処理 */
} catch (IOException e) {
/* 適宜例外処理 */
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
/* 適宜例外処理 */
}
finally{
if(writer != null){
writer.close(); //ここでIOExceptionは発生しない
}
}
}
}
}
でも、BufferedWriterをPrintWriterでラップすると、close処理でIOExceptionがthrowされなくなります。
PrintWriterのclose内で良きに計らってくれていると信じていたのですが、よく考えると疑問で
PrintWriterのclose内でBufferedWriterがcloseされるとき、そこではIOExceptionが発生する可能性があるわけで、
発生した場合に何か例外処理したいとすると、どうコーディングすればいいのか疑問に思いました。
素直にBufferedWriterは専用の変数に格納して、明示的にclose→例外処理するしかないのでしょうか。
# これ以上try-catch増やしたくないのですが。。。