如何在java中亲自格式化属性文件?

daz*_*ito 3 java properties

我正在使用java中的属性类为我的应用程序保存一些配置.这是我第一次使用房产,所以请温柔地跟我说:)

我可以从属性中插入和检索数据,没问题,但我希望将数据插入如下:

属性文件:

#Header generated by java ~ this is fine, I don't care

#Server 1 configuration
url=192.168.1.1
port=6546
username=max
password=123

#Server 2 configuration
url=192.168.2.1
port=6454
username:dude
password:123

#And so on...
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public void setProp(String host, String port, String user, String pass, 
                           String host2, String port2, String user2, String pass2)
{
        try{
            prop.setProperty("host", host);
            prop.setProperty("port", porto);
            prop.setProperty("username", user);
            prop.setProperty("password", pass);

            prop.setProperty("host2", host2);
            prop.setProperty("port2", porto2);
            prop.setProperty("username2", user2);
            prop.setProperty("password2", pass2);

            config.store(new FileOutputStream("configuration.properties"), "Server 1 Configuration");

        }catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Error: "+e.getMessage());
        }
}
Run Code Online (Sandbox Code Playgroud)

编辑:@Nathan不接近我假装.生成的属性文件是:

#Wed Apr 03 14:03:57 BST 2013 
server1.url=192.168.1.1 
server1.port=80 
server2.password=qqq 
server1.user=root 
server2.port=88 
server2.user=dude 
server1.pass=123 
server2.url=192.168.2.1
Run Code Online (Sandbox Code Playgroud)

我会寻找类似的东西:

#Wed Apr 03 14:03:57 BST 2013 
#Server 1 details
server1.url=192.168.1.1 
server1.port=80 
server1.user=root 
server1.pass=123 

#Server 2 details:
server2.password=qqq 
server2.port=88 
server2.user=dude 
server2.url=192.168.2.1
Run Code Online (Sandbox Code Playgroud)

我甚至不关心订单是否正确(如密码在url和port下等)我只需要将它们分组,就像现在我的例子中一样.

Nat*_*hes 5

属性文件不像那样分层.(还有其他格式,如YAML或XML,但不是这一种.)而是每一行都是一个键值对,其中键必须在整个文件中是唯一的.(Properties类是从Hashtable扩展的快速黑客.)更改属性文件中的键:

#Server 1 Configuration
server1.url=192.168.1.1
server1.port=6546
server1.username=max
server1.password=123

#Server 2 configuration
server2.url=192.168.2.1
server2.port=6454
server2.username:dude
server2.password:123
Run Code Online (Sandbox Code Playgroud)

然后将代码更改为:

      prop.setProperty("server1.url", host);
Run Code Online (Sandbox Code Playgroud)

因为Properties扩展了Hashtable,并且哈希表为您提供了它们自己的键值对的内部排序,所以当您从Properties对象生成属性文件时,条目将全部混乱.由于您希望键处于任意顺序,因此排序也不容易.我将使用代码生成属性文件的初始版本,然后按照您想要的顺序移动东西,并使用该属性文件继续.如果您需要以编程方式生成属性文件,那么您将需要编写代码来写入文件而不是属性如何.