我正在网络驱动器上创建一个文件,然后向其中添加数据。不时写入该文件失败。有没有一种很好的方法可以在每次保存数据之前检查文件是否可访问,或者是否可以检查数据是否已保存?
编辑: 现在我在我的代码中使用带有PrintStream的try-catch块:
try
{
logfile = new File(new File(isic_log), "log_" + production);
//nasty workaround - we'll have a file the moment we assign an output stream to it
if (!logfile.exists())
{
prodrow = production;
}
out = new FileOutputStream(logfile.getPath(), logfile.exists());
p = new PrintStream(out);
if (prodrow != "")
{
p.println (prodrow);
}
p.println (chip_code + ":" + isic_number);
p.close();
}
catch (Exception e)
{
logger.info("Got exception while writing to isic production log: " + e.getMessage());
}
那么可能是PrintStream的问题? (PrintWriter and PrintStream never throw IOExceptions)
答案 0 :(得分:2)
我会使用普通的BufferedWriter并根据需要自己添加换行符。
正常的FileOutputStream操作应该在出现错误时抛出IOException。
AFAIK,唯一的例外是PrintWriter,它不会抛出异常。相反,您需要调用checkError(),但它不会指示错误是什么或何时发生。
我建议你不要在这种情况下使用PrintWriter。
答案 1 :(得分:1)
解决此问题的唯一合理方法是尝试写入文件,并以适当的方式处理任何结果异常。由于网络的不可靠性,事先几乎不可能知道I / O操作是否会成功。