1. 适用环境:
当前,在做ssh框架,国际化等各种Java项目的时候,常常需要使用到lo4j.properties,en_us.properties 之类,它们是怎么起作用的呢? 找了点资料,尝试了下,发现它装载配置的确挺简单的2. 读:
待读取/解析的数据可以放在.properties文件中,也可以放在xml文件中,过程基本上大同小异.一次干掉两个,Java真是不挑..properties
数据如下: sample.propertiesfoo0=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<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="foo1">data1</entry>
<entry key="foo0">data0</entry>
</properties>解析如下:
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 data13. 写:
.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=data0XML
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)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>add foo2</comment>
<entry key="foo2">data2</entry>
<entry key="foo1">data1</entry>
<entry key="foo0">data0</entry>
</properties>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
Comments
No comments yet — be the first to write one.