[英]How do I add properties to a properties file using 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();
属性文件并不是真的适合这种用途,但是如果您的数据集足够小,它将可以使用。
缺少的步骤是,您需要从磁盘读取属性,进行更改,然后将其保存回磁盘。
Properties props = new Properties();
try{
props.load(inputStream);
} finally {
inputStream.close();
}
props.setProperty(....);
try{
props.store(outputStream);
} finally {
outputStream.close();
}
请记住,这根本不适合任何类型的卷处理。 另外,如果您有两个线程试图同时更改属性文件,则存在竞争情况。
如果您正在寻找轻量级的持久性存储,我强烈建议mapdb 。
您的代码每次都创建一个新的Properties
对象。 添加用户时,请确保重用旧实例。
该文件中一行的典型格式为
user=hashedPassword
因此,请使用用户名作为密钥,并使用密码作为值。 用户数量不需要存储,仅是属性映射的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.