java构造函数中的异常处理

标签 java file-io constructor exception filenotfoundexception

老实说,我对异常处理不太有经验,因为我经常因为懒惰而倾向于不处理异常。这是一个非常基本的问题。

我想知道实现这种情况的最简洁方法是什么,以及异常处理方法:

我有一个类(ConfigManager),它在其构造函数中读取文件,并且需要该文件存在才能正确构造,作为构造函数参数给出。 如果该文件不存在,我想捕获 FileNotFoundException,使用一些默认值创建文件,然后使用现在可用的默认配置文件继续创建 ConfigManager 对象。

这是一些代码:

class ConfigManager{
    ConfigManager(String file){
         try{
             builder = builderFactory.newDocumentBuilder();
             document = builder.parse (new FileInputStream(file));
             ....
         }catch (FileNotFoundException e) {

        File configFile =  new File (file);

        try {

            configFile.createNewFile();
            BufferedWriter writer = new BufferedWriter(new FileWriter(configFile));
            writer.write(this.defaultConfig);
            writer.close();


            return new ConfigManager(string); //Here's the problem. I can't do that but I need to try build ConfigManager again. How do that?

        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}  

创建默认配置文件后如何构造新的 ConfigManager 对象? 这是处理此类异常的正确方法吗?

提前致谢

最佳答案

您可以做的是在尝试解析文件之前确保该文件存在。

FileInputStream fis = null;
try {
    fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
    BufferedWriter writer = new BufferedWriter(new FileWriter(configFile));
    writer.write(defaultConfig);
    writer.close();
    fis = new FileInputStream(file);
}

try{
     builder = builderFactory.newDocumentBuilder();
     document = builder.parse (fis);

关于java构造函数中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6019183/

相关文章:

c++ - 是否可以在不使用默认构造函数的情况下在类定义中创建类的对象

java - 自定义光标图标加载了一个额外的阴影像素

java - 我应该尝试在 Java 中创建可逆枚举还是有更好的方法?

c - 使用 fwrite() 删除数据

java - 从 getContent 将文件保存在 java 中,包括新行

c++ - 我真的可以用圆括号初始化数组吗?

java - 哪个 HTML 标记最适合用于 Java applet(APPLET、EMBED、OBJECT)?

java - Junits 中的 NullPointerException

java - 使用java删除文本文件中的一行

asynchronous - 从 ViewModel 构造函数 Xamarin.Forms 调用异步方法