java - 如何打开、写入和保存文件,同时避免错误?

标签 java exception robustness

我需要删除程序中的一个文件。我的解决方案是使用一个 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/

相关文章:

c# - UnobservedTaskException - 任务从哪里来

shell - 编写健壮的 shell 脚本的规则是什么?

testing - 我忘记测试哪种带外故障?

java - Eclipse 插件和线程

java - 从不同的构造函数访问和添加数据

java - 按回归排序

python - ConfigObj 选项验证

exception - 查询确实返回数据时出现奇怪的 Breeze 错误(更新 : Metadata not loading correctly)

haskell - 没有错误的健壮的haskell

java - 如何维护用于发布到谷歌和亚马逊商店的应用程序