Java:将配置变量存储在文件中

时间:2014-08-20 12:18:57

标签: java file netbeans properties path

我正在使用NetBeans 8.0和JavaFX Scene Builder 2.0开发一个程序,需要在文件中存储一些变量,管理员用户可以在需要时对其进行修改(例如更改服务器IP地址或不可编辑的数字值) textfield)如果它们关闭并再次加载程序,则保留变量中所做的更改。就像程序的任何设置部分一样。

我只是尝试使用Properties文件,但我有问题将它存储在与.jar文件相同的文件夹中。当程序执行行new FileOutputStream("configuration.properties");时,文件将在磁盘根目录下创建。由于文件的文件夹可以存储在任何地方,我不知道如何指出正确的路径。

在主项目的包中创建属性文件并使用getClass().getResourceAsStream("configuration.properties");我可以读取它但我无法写入变量的变更值。

有没有更好的方法来创建配置文件?或者属性文件是这种情况的最佳选择?

我的另一个问题是,是否可以阻止访问文件内容或加密内容?

PD:我目前正在Linux操作系统中测试这部分代码,但该程序将在准备就绪后在Windows 7中使用。

2 个答案:

答案 0 :(得分:1)

最后我发现如何从.jar文件夹中获取绝对路径来创建属性文件,然后读/写它。这是代码:

File file = new File(System.getProperty("java.class.path"));
File filePath = file.getAbsoluteFile().getParentFile();    
String strPath = filePath.toString();

File testFile = new File(strPath+"/configuration.properties");

在Ubuntu 13.04和Windows 7中测试过,它可以正常工作。

用于加密我找到this thread的属性值,以回答它是如何做的。

答案 1 :(得分:0)

如果您使用Maven,则可以将属性文件存储在resources文件夹中,例如resources/properties/。当您需要加载它们时,请执行以下操作:

private Properties createProps(String name)
{
    Properties prop = new Properties();
    InputStream in = null;
    try
    {
        in = getClass().getResourceAsStream(name);
        prop.load(in);
    }
    catch (IOException ex)
    {
        System.err.println("failed to load \"" + name + "\": " + ex);
    }
    finally
    {
        try
        {
            if (in != null)
            {
                in.close();
            }
        }
        catch (IOException ex)
        {
            System.err.println("failed to close InputStream for \"" + name + "\":\n" + FXUtils.extractStackTrace(ex));
        }
    }
    return prop;
}

nameresources文件夹中属性文件的完整路径。例如,如果您将props.properties存储在resources/properties/中,那么您将传入properties/props.properties

我不是百分百确定你是否可以将这个确切的程序延续到非Maven项目。您需要指示您正在使用的任何编译器工具,以包含您的属性文件。

就你的最后一个问题而言,关于加密你的财产,我会考虑将其作为一个单独的问题发布(在经过深入研究后尝试发现适合你的现有解决方案)。