Java属性 - 无法找到现有属性文件

时间:2014-06-09 05:33:38

标签: java properties-file

我使用以下引用,因为这是我第一次使用Java Properties。

我尝试在程序启动开始时运行以下命令,因此用户只需选择一次数据库文件路径。选择一次后,每个后续程序运行应该自动使用config.properties文件并获取数据库路径。

不幸的是,即使在上一个程序运行中选择了正确的数据库路径并确认属性文件包含数据库路径信息之后,input == null也会在每个程序运行中不断触发。

我在下面做错了吗?

    Properties prop = new Properties();
    InputStream input = null;

    String filename = "config.properties";
    input = this.getClass().getClassLoader().getResourceAsStream(filename);
    if (input == null) 
    {
        fileChooser.setDialogTitle("Choose the database file");
        fileChooser.setAcceptAllFileFilterUsed(false);
        FileFilter filter = new FileNameExtensionFilter("S3DB Files", "S3DB");
        fileChooser.addChoosableFileFilter(filter);

        int ret = fileChooser.showDialog(null, "Select File");
        File file = null;

        if (ret == JFileChooser.APPROVE_OPTION) {
            file = fileChooser.getSelectedFile();
            dbc = new DBConnect(file.getAbsolutePath());
        }

        OutputStream output = null;

        try 
        {
            output = new FileOutputStream("config.properties");

            // set the properties value
            prop.setProperty("database", file.getAbsolutePath());

            // save properties to project root folder
            prop.store(output, null);

        } 
        catch (IOException io) 
        {
            io.printStackTrace();
        } 
        finally 
        {
            if (output != null) 
            {
                try 
                {
                    output.close();
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                }
            }
        }
    }
    else
    {
        try
        {
            prop.load(input);
            dbc = new DBConnect(prop.getProperty("database"));
        }
        catch(Exception e)
        {
            JOptionPane.showMessageDialog(null, e.toString(), "Properties Read/Write Exception Occured (PRGRYADDView())", JOptionPane.ERROR_MESSAGE);
        }
    }

2 个答案:

答案 0 :(得分:0)

检查属性文件路径。

创建' config.properties'文件,并将其放在项目类路径中。

答案 1 :(得分:0)

替换此行:

input = this.getClass().getClassLoader().getResourceAsStream(filename);

用这个:

try
{
    input = new FileInputStream(filename);
}
catch(Exception e){}

我试图从类路径而不是相对于可执行JAR的属性文件本身加载。以上解决了我的问题。

请务必同时添加自己的异常处理。