properties的使用

1. 适用环境:

当前，在做ssh框架,国际化等各种Java项目的时候，常常需要使用到lo4j.properties,en_us.properties 之类,它们是怎么起作用的呢? 找了点资料，尝试了下,发现它装载配置的确挺简单的

2. 读:

待读取/解析的数据可以放在.properties文件中,也可以放在xml文件中,过程基本上大同小异.一次干掉两个,Java真是不挑.

.properties

数据如下: sample.properties

foo0=data0
foo1=data1

另外,下面这么写也是合法并且和上面等价的:

fo
o0=data0
foo1=dat
a1

解析如下:

package com.argcandargv.sample;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class ParseProperties{
public static void main(String []args) throws IOException{
//absolute path
String fileName="/home/yu/KEG/test/java/PropertiesUsage/sample.properties";
Properties properties = new Properties();
FileInputStream fileInpustStream = new FileInputStream(fileName);
properties.load(fileInpustStream);
fileInpustStream.close();
properties.list(System.out);
System.out.println("properties of foo1 is "+properties.getProperty("foo1"));
}
}

XML

数据如下: sample.xml

data1
data0

解析如下:

package com.argcandargv.sample;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class ParseXML{
public static void main(String []args) throws IOException{
String fileName="/home/yu/KEG/test/java/PropertiesUsage/sample.xml";
Properties properties = new Properties();
FileInputStream fileInpustStream = new FileInputStream(fileName);
properties.loadFromXML(fileInpustStream);//
fileInpustStream.close();
properties.list(System.out);
System.out.println("properties of foo1 is "+properties.getProperty("foo1"));
}
}

两者输出是一样的,如下:

-- listing properties --
foo1=data1
foo0=data0
properties of foo1 is data1

3. 写:

.properties

对上面数据进行添加数据和保存

package com.argcandargv.sample;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class ParseProperties{
public static void main(String []args) throws IOException{
String fileName="/home/yu/KEG/test/java/PropertiesUsage/sample.properties";
Properties properties = new Properties();
FileInputStream fileInpustStream = new FileInputStream(fileName);
properties.load(fileInpustStream);
FileOutputStream fileOutputStream = new FileOutputStream(fileName);
properties.setProperty("foo2", "data2");
properties.store(fileOutputStream, "add foo2");
fileInpustStream.close();
fileOutputStream.close();
}
}

被修改后的sample.properties如下:

#add foo2
#Mon Jan 21 11:02:12 CST 2013
foo2=data2
foo1=data1
foo0=data0

XML

package com.argcandargv.sample;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class ParseXML{
public static void main(String []args) throws IOException{
String fileName="/home/yu/KEG/test/java/PropertiesUsage/sample.xml";
Properties properties = new Properties();
FileInputStream fileInpustStream = new FileInputStream(fileName);
properties.loadFromXML(fileInpustStream);
properties.setProperty("foo2", "data2");
FileOutputStream fileOutputStream = new FileOutputStream(fileName);
properties.storeToXML(fileOutputStream, "add foo2");
fileInpustStream.close();
fileOutputStream.close();
}
}

保存结果(sample.xml)

add foo2
data2
data1
data0

4. 注意事项

1′ properties是无顺序的 2′ new完一个Properties后,完全可以load任何数据,自行设置properties 3′ properties是hash的,所以key是唯一的 4′ xml和.properties不过是保存方式不同而已,选择自己喜欢的即可,它们之间的优劣,恐怕只在审美上面 5′ 可以注意到,xml的store还可以设置encoding,这些小问题完全可以查看API灵活选择自己需要的东西

5. References:

[1] java.util.Properties类 学习笔记 : http://trans.blog.51cto.com/503170/110227/

[2] java.util.properties 类的使用 : http://blog.csdn.net/cece_2012/article/details/7522964