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