点击此处返回总目录 一、Properties类概述 前面讲Map接口的一个实现类Hashtable的时候,说过虽然Hashtable不怎么用了,但是他的子类Properties依然还活跃在开发舞台。 特点: 1. Hashtable的子类,是一个线程安全的键值对集合。map集合中的方法都可以使用。 2. 该集合没有泛型,键值都是字符串。 3. 可以与IO结合起来,完成持久化存储。 这个类在以后的开发中很重要。今天只讲基本用法。 二、和流技术相结合的方法 1. setProperty(String key, String value) //存储键值对。Properties类继承了Map,所以是有put()方法的,但是我们不直接用。 而是用setProperty()方法。实际上setProperty()方法就是调用了put()方法。【例1】 2. String getProperty(String key) //通过键获取值。同样我们不使用get()方法,而是使用它自己的这个方法。【例1】 3. Set<String> stringPropertyNames() //获取键的集合。同样我们不使用keySet()方法,而是使用它自己的方法。【例2】 //不过这个方法不用记,因为使用的时候用不到遍历。 4. void load(InputStream in) //把文件中的键值对加载到集合中。流对象会读取文件中的键值对,然后放到集合中。 可以传递任意的字节输入流。【例3】 5. void load(Reader r) //也可以传递任意的字符输入流。 6. void store(OutputStream out, String comments) //把集合中键值对存储到文件中。后面的参数作为注释,一般写""。【例4】 7. void store(Writer w) 例1:
package cn.itcast.demo01; import java.util.Properties; public class Test { public static void main(String[] args) { Properties pro = new Properties(); pro.setProperty("a", "1"); pro.setProperty("b","2"); pro.setProperty("c", "3"); System.out.println(pro); //{b=2, a=1, c=3} String value =pro.getProperty("a"); System.out.println(value); //1 } } |
例2:
package cn.itcast.demo01; import java.util.Properties; import java.util.Set; public class Test { public static void main(String[] args) { Properties pro = new Properties(); pro.setProperty("a", "1"); pro.setProperty("b","2"); pro.setProperty("c", "3"); System.out.println(pro); //{b=2, a=1, c=3} Set<String> set = pro.stringPropertyNames(); for(String key:set){ System.out.print(pro.getProperty(key)+" "); //2 1 3 } } } |
例3:首先创建pro.properites文件(文件名不重要,但是习惯这么写,见名知意)。 文件内容很严格,必须是键值对。注意等号前后不要有空格,最后不要有分号。可以使用井号作为注释。 //pro.properties
name=lijing age=18 sex=girl #email=11111@qq.com |
//Test.java
package cn.itcast.demo02; import java.io.FileReader; import java.io.IOException; import java.util.Properties; public class Test { public static void main(String[] args) throws IOException{ FileReader fr = new FileReader("f:\\pro.properties"); //使用流读取文件。 Properties pro = new Properties(); pro.load(fr); //调用load,就加载进来了。文件中的键值对就已经进入到集合中了。 fr.close(); //这个时候,流就可以关闭了。 System.out.println(pro); } } |
例4:
package cn.itcast.demo03; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; public class Test { public static void main(String[] args) throws IOException{ FileWriter fw = new FileWriter("f:\\pro.properties"); Properties pro = new Properties(); pro.setProperty("name", "lijing"); pro.setProperty("age","55"); pro.store(fw,"hello"); //第二个参数一般写"",如果要写的话写英文。 fw.close(); } } |
运行结果,查看pro.properties:
#hello #Wed Oct 03 11:05:52 CST 2018 age=55 name=lijing |
可以看到文件的内容是pro集合的内容,而原有的文件内容都没有了。所以要想改变内容,需要先load,然后修改,再store。仅仅store一条修改的键值对,会导致其他键值对都清掉。 |