首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Java将属性添加到属性文件?

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

Stack Overflow用户
提问于 2014-09-27 22:01:29
回答 3查看 95关注 0票数 0

我有一个非常简短的问题。我有一个使用属性文件的Java程序。该文件用于跟踪程序的用户。我的问题是我不知道如何添加到文件中。我知道如何设置现有属性的值,但我不知道如何在不覆盖其他属性的情况下添加更多属性。

我想要的程序‘注册’用户,可以这么说。每当新用户“注册”时,我希望程序添加一个包含新用户信息的新属性。但我遇到了这个问题:示例:

代码语言:javascript
复制
File: numOfUsers=0

一个用户注册。用户名是'c00lGuy‘。程序将其注册到文件中:

代码语言:javascript
复制
File: numOfUsers=1   user1-username=c00lGuy

另一个用户注册。她决定给自己的用户名取名为“She Gr8Girl”。该程序注册如下:

代码语言:javascript
复制
File: numOfUsers=2   user2-username=theGr8Girl

两个用户注册后的文件:

代码语言:javascript
复制
File: numOfUsers=2   user2-username=theGr8Girl

如何防止我的程序覆盖文件中的现有行?它似乎删除了文件的内容,然后添加了我告诉它的内容。我不希望它删除文件的内容。

我用来注册属性的代码如下:

代码语言:javascript
复制
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();
        }

}
EN

回答 3

Stack Overflow用户

发布于 2014-09-27 22:07:39

尝试如下所示:

代码语言:javascript
复制
FileOutputStream out = new FileOutputStream(fileName);
props.setProperty("numOfUsers", 2);
...
props.store(out, null);
out.close();
票数 0
EN

Stack Overflow用户

发布于 2014-09-27 22:10:49

属性文件实际上并不是为这种用途而设计的,但是如果你有一个足够小的数据集,它就可以工作。

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

代码语言:javascript
复制
Properties props = new Properties();
try{
  props.load(inputStream);
} finally {
  inputStream.close();
}
props.setProperty(....);
try{
  props.store(outputStream);
} finally {
  outputStream.close();
}

请记住,这根本不适合任何类型的批量处理。此外,如果有两个线程试图同时更改属性文件,则会出现争用情况。

如果你正在寻找一个轻量级的持久化存储,我强烈推荐mapdb

票数 0
EN

Stack Overflow用户

发布于 2014-09-27 22:12:50

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

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

代码语言:javascript
复制
user=hashedPassword

因此,使用用户名作为关键字,使用密码作为值。用户数量不需要存储,它只是属性映射的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26075439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档