繁体   English   中英

如何使用Java将属性添加到属性文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM