【发布时间】:2013-06-26 07:12:23
【问题描述】:
我在 Java 中使用 FileOutputStream 和 BufferedWriter 时遇到了问题。
如果我的磁盘空间已满,我正在尝试写入,它会抛出IOException(这是正确的),但是当调用writer.close()时,它会关闭资源失败,抛出另一个@ 987654324@ 并保持资源打开!
这是我使用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
}
}
}
【问题讨论】:
-
如果 write() 抛出异常,则不执行 flush()...所以我认为它没有帮助...
-
如果我在 .close() 之前不执行 .flush(),则 .close() 会抛出 IOException,因为它会在执行 .flush() 时失败(在内部调用如果之前没有做过该方法)。如果我在 try 块中执行 .flush() ,它将抛出 IOException (当磁盘空间不足时)并且我可以毫无例外地调用 .close() (BufferedWriter 将已经处于“刷新模式”并且 .close () 将工作)。我确信那里有更好的解决方案。谢谢
标签: java ioexception fileoutputstream diskspace bufferedwriter