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

时间:2014-09-27 14:01:29

标签: java file

我有一个非常快速的问题。我有一个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();
        }

}

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

FileOutputStream out = new FileOutputStream(fileName);
props.setProperty("numOfUsers", 2);
...
props.store(out, null);
out.close();

答案 1 :(得分:0)

属性文件并非真正用于此类用途,但如果您的数据集足够小,则可以使用。

您缺少的步骤是您需要从磁盘读取属性,进行更改,然后将它们保存回磁盘。

Properties props = new Properties();
try{
  props.load(inputStream);
} finally {
  inputStream.close();
}
props.setProperty(....);
try{
  props.store(outputStream);
} finally {
  outputStream.close();
}

请记住,这根本不适用于任何类型的卷处理。此外,如果您有两个线程试图同时更改属性文件,则存在竞争条件。

如果您正在寻找轻量级持久性商店,我强烈推荐mapdb

答案 2 :(得分:0)

您的代码每次都会创建一个新的Properties对象。确保在添加用户时重用旧实例。

此文件中一行的典型格式为

user=hashedPassword

所以使用用户名作为密钥,密码作为值。不需要存储用户数,它只是属性映射的大小。