我正在使用NetBeans 8.0和JavaFX Scene Builder 2.0开发一个程序,需要在文件中存储一些变量,管理员用户可以在需要时对其进行修改(例如更改服务器IP地址或不可编辑的数字值) textfield)如果它们关闭并再次加载程序,则保留变量中所做的更改。就像程序的任何设置部分一样。
我只是尝试使用Properties
文件,但我有问题将它存储在与.jar文件相同的文件夹中。当程序执行行new FileOutputStream("configuration.properties");
时,文件将在磁盘根目录下创建。由于文件的文件夹可以存储在任何地方,我不知道如何指出正确的路径。
在主项目的包中创建属性文件并使用getClass().getResourceAsStream("configuration.properties");
我可以读取它但我无法写入变量的变更值。
有没有更好的方法来创建配置文件?或者属性文件是这种情况的最佳选择?
我的另一个问题是,是否可以阻止访问文件内容或加密内容?
PD:我目前正在Linux操作系统中测试这部分代码,但该程序将在准备就绪后在Windows 7中使用。答案 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;
}
name
是resources
文件夹中属性文件的完整路径。例如,如果您将props.properties
存储在resources/properties/
中,那么您将传入properties/props.properties
。
我不是百分百确定你是否可以将这个确切的程序延续到非Maven项目。您需要指示您正在使用的任何编译器工具,以包含您的属性文件。
就你的最后一个问题而言,关于加密你的财产,我会考虑将其作为一个单独的问题发布(在经过深入研究后尝试发现适合你的现有解决方案)。