Java でFileOutputStream
andを使用すると問題が発生しました。BufferedWriter
ディスク容量がいっぱいで、書き込もうとするとスローされIOException
ます (これは正しいです) が、writer.close() を呼び出すと、リソースを閉じることができず、別のリソースがスローされIOException
、リソースを開いたままにします!
これが私の回避策writer.flush()
です。動作しているように見えますが、これを処理するより良い方法はありますか?
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding));
StringBuilder buff = new StringBuilder();
writeToStream(buff, separator, data);
writer.write(buff.toString());
writer.flush(); // flush before closing to make sure there is enough space on disk to complete the close()
logger.trace("writeFile: file written, file={}", file);
} catch (IOException e) {
logger.error("writeFile: cannot write to file: {}", file, e);
throw new ... //some exception wrapper here
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
// ignore
}
}
}