在java程序中加载属性

在java程序中加载属性,java,properties,Java,Properties,我是一名java程序员;现在我使用J2SE和NetBeans 6.9.1来编写应用程序 我现在面临的问题是使用单例类从本地文件系统中的已知位置加载属性。让我恼火的是,我得到了一个错误,它声明了一个throws子句,或者捕获了初始化实例变量的异常。请任何人帮我理解这一点 提前谢谢 代码如下: package cat.oai.atapplications.phot; import java.io.FileInputStream; import java.io.FileNotFoundExcepti

我是一名java程序员;现在我使用J2SE和NetBeans 6.9.1来编写应用程序

我现在面临的问题是使用单例类从本地文件系统中的已知位置加载属性。让我恼火的是,我得到了一个错误,它声明了一个throws子句,或者捕获了初始化实例变量的异常。请任何人帮我理解这一点

提前谢谢

代码如下:

package cat.oai.atapplications.phot;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

/**
 *
 * @author fdalmau
 */
public class PhotPropertiesManager {

    private static Properties photProperties;

    private PhotPropertiesManager() throws FileNotFoundException, IOException {
        photProperties = LoadProperties();
    }

    public static PhotPropertiesManager getInstance() {
        return PhotPropertiesManagerHolder.INSTANCE;
    }

    public static Properties getPhotProperties() {
        return PhotPropertiesManager.photProperties;
    }

    private static Properties LoadProperties() throws FileNotFoundException,
                                                      IOException {

        Properties defaultPhotProperties = new Properties();

        FileInputStream in = new FileInputStream("defaultphot");
        defaultPhotProperties.load(in);
        in.close();

        Properties applicationPhotProperties = 
                                     new Properties(defaultPhotProperties);

        in = new FileInputStream("lastexecutionphot");
        applicationPhotProperties.load(in);
        in.close();

        return applicationPhotProperties;
    }

    private static class PhotPropertiesManagerHolder {

        /******
          The problem is is this line of code:
         ******/
        static final PhotPropertiesManager INSTANCE = new PhotPropertiesManager();

    }
}

问题是静态字段不能引发检查异常。我会像这样简化代码

public enum PhotPropertiesManager {;
    private static final Properties PHOT_PROPERTIES = new Properties();

    static {
        try {
            load("defaultphot");
            load("lastexecutionphot");
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

    private static void load(String filename) throws IOException {
        FileInputStream in = new FileInputStream(filename);
        PHOT_PROPERTIES.load(in);
        in.close();
    }

    public static Properties getPhotProperties() {
        return PHOT_PROPERTIES;
    }
}

您需要使用try-catch块才能使用代码,因为您在声明以下内容时引发异常:

PhotPropertiesManager()
Java让您“捕获”程序可能遇到的错误,然后相应地处理这些错误,从而基本上确保程序不会崩溃(至少不会彻底崩溃)

您的try catch应该类似于:

try{
PhotPropertiesManager();
}
catch(Exception e){
whateveryouwanttodo();
}

多林提供的更多文档,

您能告诉我们错误吗?是否存在堆栈跟踪?它很可能要求使用try-catch,因为当您声明PhotPropertiesManager()时,它会引发多个异常。@Max您已经搞定了,Francesc,您需要使用“try…catch”块,资源Java不是C#方法名应该是
lowerCamelCase
,以便从视觉上区分应该是
UpperCamelCase
的类名,这两个响应对我都非常有用。尽管如此,我还是会选择彼得·劳瑞(Peter Lawrey)的帖子,因为我觉得它更漂亮、更紧凑
更漂亮、更紧凑
是我个人的追求你可以勾选左边你喜欢的答案来接受它。