Java 集合类 9-Properties类

时间:2023-02-16 16:55:14

 在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", "城市"));
    }
}

运行结果:

Java 集合类 9-Properties类

 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 集合类 9-Properties类

运行后测试文件夹:

Java 集合类 9-Properties类

 由于Java采用的是Unicode编码,所以在notepad中会显示乱码,没有关系。

控制台输出:

Java 集合类 9-Properties类

注意:
1. 属性文件在程序中进行了修改,只要没有load,就不会保存在文件中。
2. Properties只能操作String。
3. Properties可以进行远程属性内容的加载。