如何使用Java为属性文件添加属性?
我有一个真正的快速问题。我有一个Java程序,我在其中使用属性文件。该文件用于跟踪程序的用户。我的问题是我无法弄清楚如何添加到文件。我知道如何将现有的属性设置为一个值,但我不知道如何添加更多的属性,而不用重写其他属性。如何使用Java为属性文件添加属性?
我想让程序“注册”用户,可以这么说。每当新用户注册时,我希望程序添加一个包含新用户信息的新属性。我遇到这个问题,但: 例如:
File: numOfUsers=0
一个用户注册。用户名是'c00lGuy'。程序在文件中注册:
File: numOfUsers=1 user1-username=c00lGuy
另一个用户注册。她决定打电话给她的用户名'theGr8Girl'。该程序注册的:
File: numOfUsers=2 user2-username=theGr8Girl
两个用户注册后的文件:
File: numOfUsers=2 user2-username=theGr8Girl
如何防止从该文件在覆盖现有生产线我的程序?它似乎删除文件的内容,然后添加我告诉它的内容。我不希望它删除文件的内容。
我使用注册的属性代码:
Properties prop = new Properties();
OutputStream output = null;
int userCount = getUserCount();
userCount++;
try {
output = new FileOutputStream(fileName);
// set the properties value
prop.setProperty("numOfUsers", String.valueOf(userCount));
prop.setProperty("user" + userCount + "-username", username);
// 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();
}
}
尝试是这样的:
FileOutputStream out = new FileOutputStream(fileName);
props.setProperty("numOfUsers", 2);
...
props.store(out, null);
out.close();
这是一个非常糟糕的主意。 – 2014-09-27 14:08:35
@Oliver Charlesworth:我没有说这是一个好主意,但它是可能的。我同意用户应该存储在数据库中。 – 2014-09-27 14:21:07
属性文件并没有真正用于这种用途的,但如果你有一个足够小的数据集就可以工作。
您缺少的步骤是您需要从磁盘读取属性,进行更改,然后将其保存回磁盘。
Properties props = new Properties();
try{
props.load(inputStream);
} finally {
inputStream.close();
}
props.setProperty(....);
try{
props.store(outputStream);
} finally {
outputStream.close();
}
请记住,这不适用于任何类型的卷处理。另外,如果您有两个线程同时尝试更改属性文件,则会出现竞争条件。
如果你正在寻找一个轻量级的持久存储,我强烈建议mapdb。
您的代码每次都会创建一个新的Properties
对象。确保在添加用户时重新使用旧实例。
在这个文件中的行的典型格式是
user=hashedPassword
所以使用用户名作为密钥和密码的值。用户数量不需要存储,它只是属性图的大小。
这不是属性文件的用途。它们被设计成由人类提供的(只读)配置。你在谈论坚持状态;你应该使用一个数据库(或至少,一个单独的文件)。 – 2014-09-27 14:02:54
@OliverCharlesworth好的。谢谢。我会检查出来的。 – Rane 2014-09-27 14:09:35
@Rane - 你是否必须使用属性,或者你只是寻找一种快速简单的方法来保存数据? – Chris 2014-09-27 14:09:55