Java拾贝第十六天——其他集合类Properties

发布时间 2023-11-04 20:15:48作者: ocraft

Properties

Properties是Map的子实现类,其定义如下

public class Properties extends Hashtable<Object,Object>

Hashtable是Map接口的一个子类,与Vector一样都是旧的操作类,与HashMap没什么区别。

Properties是操作属性文件的一个属性操作类。

属性文件中属性都是以字符串表示的 键值对 保存的     key=value
如果想要操作属性文件的属性 可以使用IO流配合Properties类完成

Windows中 .ini 后缀大多都是属性文件

Properties类常用方法如下:

方法 类型 描述
public String getProperty(String key) 普通方法 根据Key获得Value(没有则返回null)
public String getProperty(String key, String defaultValue) 普通方法 根据Key获得Value(没有则返回defaultValue)
public synchronized Object setProperty(String key, String value) 同步方法 设置属性
public void store(OutputStream out, String comments) throws IOException 普通方法 输出属性内容,同时声明属性的注释
public synchronized void load(InputStream inStream) throws IOException 同步方法 读取输入流的内容
public void storeToXML(OutputStream os, String comment) throws IOException 普通方法 以XML文件格式输出属性,同时声明注释
public synchronized void loadFromXML(InputStream in) throws IOException, InvalidPropertiesFormatException 同步方法 从XML文件中读取内容

public synchronized Object setProperty(String key, String value)

public String getProperty(String key)

public String getProperty(String key, String defaultValue)

设置属性和获取属性,以及获取属性的重载

栗子:

    public static void main(String[] args) {
        Properties pro = new Properties();
        pro.setProperty("3","可乐");
        pro.setProperty("4","大瓶冰红茶");
        pro.setProperty("2.5","罐装雪碧");

        System.out.println(pro.getProperty("3"));
        System.out.println(pro.getProperty("5"));
        System.out.println(pro.getProperty("5","王老吉"));//没有key则返回设置的内容
    }

程序运行结果:

可乐
null
王老吉

public void store(OutputStream out, String comments) throws IOException

输出属性内容,同时声明注释 (后缀是任意的,但最好按照标准设置为properties)

栗子:

    public static void main(String[] args) {
        Properties pro = new Properties();
        File file = new File("D:" + File.separator + "IOtest" + File.separator + "T.properties");
        pro.setProperty("3","可乐");
        pro.setProperty("4","大瓶冰红茶");
        pro.setProperty("2.5","罐装雪碧");

        try {
            pro.store(new FileWriter(file),"这里是注释");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

下个方法展示读取内容。

public synchronized void load(InputStream inStream) throws IOException

读取输入流的内容

栗子:

    public static void main(String[] args) {
        Properties pro = new Properties();
        File file = new File("D:" + File.separator + "IOtest" + File.separator + "T.properties");
        try {
            pro.load(new FileReader(file));//读取的内容在对象内
            System.out.println(pro);//Properties重写了toString方法
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

程序运行结果:

{4=大瓶冰红茶, 3=可乐, 2.5=罐装雪碧}

public void storeToXML(OutputStream os, String comment) throws IOException

输出成XML文件

栗子:

    public static void main(String[] args) {
        Properties pro = new Properties();
        File file = new File("D:" + File.separator + "IOtest" + File.separator + "op.XML");
        pro.setProperty("3","可乐");
        pro.setProperty("4","大瓶冰红茶");
        pro.setProperty("2.5","罐装雪碧");
        try {
           pro.storeToXML(new FileOutputStream(file),"我是注释");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

D:\IOtest\op.XML内:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>我是注释</comment>
<entry key="4">大瓶冰红茶</entry>
<entry key="2.5">罐装雪碧</entry>
<entry key="3">可乐</entry>
</properties>

public synchronized void loadFromXML(InputStream in) throws IOException, InvalidPropertiesFormatException

读取XML文件内容

栗子:

    public static void main(String[] args) {
        Properties pro = new Properties();
        File file = new File("D:" + File.separator + "IOtest" + File.separator + "op.XML");
        try {
            pro.loadFromXML(new FileInputStream(file));
            System.out.println(pro);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

程序运行结果:

{4=大瓶冰红茶, 3=可乐, 2.5=罐装雪碧}