0

Java でFileOutputStreamandを使用すると問題が発生しました。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
               }
          }
     }
4

1 に答える 1