在Java中有一种存放配置信息的属性文件(资源文件)格式为:*.properties。在这种格式的文件里存放的是”key=value”键值对形式的数据。
而Properties就是Java用于操作properties文件的类。
因为properties文件保存的是”key-value”形式的数据,所以我们很容易就想到Map集合,因为Map集合的元素就是”key-value”形式的。
JDK给出的Properties类,继承于Map接口的Hashtable子类,定义如下:
public class Properties extends Hashtable<Object,Object>
Properties类中关于属性操作的方法如下:
// 设置属性,key-value
public synchronized Object setProperty(String key, String value)
// 通过key得到value
public String getProperty(String key)
// 通过key得到value,如果key不是该属性文件元素,则返回设置的默认值
public String getProperty(String key, String defaultValue)
操作如下:
import java.io.FileNotFoundException;
import java.util.Properties;
public class Test {
public static void main(String[] args) {
Properties propertise = new Properties();
// 设置属性
propertise.setProperty("China", "中国");
propertise.setProperty("The earth", "地球");
propertise.setProperty("The universe", "宇宙");
// 取得指定key所对应的属性,如果没有对应关系,返回null
System.out.println(propertise.getProperty("China"));
System.out.println(propertise.getProperty("Beijing"));
// 取得属性,如果没有对应的value,返回设置的默认值,但是这并不改变该key所对应的value
System.out.println(propertise.getProperty("Beijing", "城市"));
}
}
运行结果:
Properties不仅可以进行信息的获取和修改,最重要的是它跟存储在磁盘上的属性文件之间的IO操作。看下面这两个方法:
// 将属性信息加载(保存)到属性文件中
public void store(OutputStream out, String comments) throws IOException
// 读取本地属性文件中的内容,msg为提示信息,会出现在属性文件的第一行
public synchronized void load(InputStream inStream, String msg) throws IOException
操作如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
/* * 测试路径为: E:\IO */
public class Test {
public static void main(String[] args) throws FileNotFoundException, IOException {
// 将属性输出到属性文件中
Properties properties = new Properties();
// 设置属性
properties.setProperty("China", "中国");
properties.setProperty("The earth", "地球");
properties.setProperty("The universe", "宇宙");
File file = new File("E:\\IO\\demo.properties");
// 输出到属性文件中,输出自动创建文件
properties.store(new FileOutputStream(file), "Look!");
// 读取保存的属性文件
Properties properties1 = new Properties();
properties1.load(new FileInputStream(file)) ;
System.out.println(properties1.getProperty("China"));
System.out.println(properties1.getProperty("The earth"));
System.out.println(properties1.getProperty("The universe"));
}
}
运行前测试文件夹:
运行后测试文件夹:
由于Java采用的是Unicode编码,所以在notepad中会显示乱码,没有关系。
控制台输出:
注意:
1. 属性文件在程序中进行了修改,只要没有load,就不会保存在文件中。
2. Properties只能操作String。
3. Properties可以进行远程属性内容的加载。