我需要删除程序中的一个文件。我的解决方案是使用一个 erase()
方法来执行此操作,如下所示:
public static void erase(String string) {
FileWriter fw = null;
try {
fw = new FileWriter(string);
fw.write(new String());
} catch (IOException ie) {
e.printStackTrace();
} finally {
fw.flush();
fw.close();
}
}
这里有几个问题:
如果
fw
未正确初始化(无论出于何种原因,丢失文件,无效权限等),那么当我尝试在finally
中关闭它时 block ,有一个 NullPointerException。如果我没有finally block ,那么我可能会因上述原因抛出NullPointerException。
如果我在 try block 内关闭文件,那么如果文件正确打开但未正确写入,我可能会泄漏资源。
我还忽略了哪些其他问题以及如何强化此方法?
最佳答案
您可以将 finally 功能包装在 if 语句中:
if(fw != null){
fw.close();
}
这将确保如果文件曾经打开过,那么它将被关闭。如果它一开始就没有打开,那么它不会做任何事情,这正是您想要的。
另外,我不确定它是否就像发布一样,但通常不建议只在 catch block 中打印堆栈跟踪并继续(“吞掉”异常)。您确实应该让异常被抛出,因为这可能会隐藏错误并使跟踪它们变得非常困难。
编辑:请参阅下面的评论。
关于java - 如何打开、写入和保存文件,同时避免错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6769972/