Java中Properties类的学习总结

学习目标:

1、认识properties文件,理解其含义,会正确创建properties文件。

2、会使用java.util.Properties类来操作properties文件。

一、认识properties文件

1、properties文件是一个文本文件

2、properties文件的语法有两种,一种是注释,一种属性配置。

 注    释:前面加上#号

 属性配置:以“键=值”的方式书写一个属性的配置信息。

3、properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“”表示。

4、properties的属性配置键值前后的空格在解析时候会被忽略。

5、properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。

例如,下面一个properties文件:

 

二、解读java.util.Properties类

  在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件)。Properties类是Hashtable的子类。也就是说它具备Map集合的特点。Properties的构造函数有两个,一个不带参数,一个使用一个Properties对象作为参数。

1、Properties类的层次结构

java.lang.Object

  java.util.Dictionary<K,V>

      java.util.Hashtable<Object,Object>

          java.util.Properties

从层次机构看,Properties类实现了Map接口,因为HashTable实现了Map接口,因此Properties类本质上是一种简单的Map容器。

实际上,Properties类本身表示了对一种Map结构的操作。properties文件本身就表示了一个“键值对”的集合。因此,Properties类属于集合容器的家族,在使用前应该创建一个Properties的容器,实际上就是创建一个默认不带参数的Properties对象。以后通过别的方式给里面添加“键值对”。

2、properties文件与Properties类的关系

通过properties文件可以填充Properties类。

也可以通过xml文件来填充Properties类。

可以通过绝对路径方式加载Properties文件信息,也可以使用相对路径加载。

三、实践

1、以绝对方式加载properties文件信息。

2、将Properties对象持久化到一个properties文件或者一个xml文件中。

3、修改并持久化properties文件。

测试的properties文件:

 

测试类:

  1 /** 
  2 * Properties类测试 
  3 * User: 支胜勇 
  4 */ 
  5 public class Test4 { 
  6     
  7         public static void main(String args[]) throws IOException { 
  8             
  9             System.out.println("------------测试Properties-------------");
 10             
 11             Properties prop=new Properties();
 12             prop.put("姓名", "支胜勇");
 13             prop.put("爱好", "编程和旅游");
 14             prop.put("籍贯", "贵州毕节");
 15             
 16             createProperFile("E:\tt.properties",prop);
 17             
 18             readProperFile("E:\tt.properties");
 19             
 20             Map<String,String> map=new HashMap<String,String>();
 21             map.put("性别", "男");
 22             map.put("学历", "本科");
 23             modifyProperFile("E:\tt.properties",map);
 24         } 
 25 
 26         
 27         /***
 28          * 创建properties文件,并向其写入键值对,包括properties和xml格式
 29          * @param fileName
 30          * @param keyValues
 31          */
 32         public static void createProperFile(String fileName,Properties prop){
 33              System.out.println("------------创建Properties文件----------");
 34             //创建properties文件
 35              
 36             File properFile=new File(fileName.substring(0,fileName.lastIndexOf("."))+".properties");
 37             if(!properFile.exists()){
 38                 try {
 39                     properFile.createNewFile();
 40                 } catch (IOException e) {
 41                     // TODO Auto-generated catch block
 42                     System.err.print("创建文件失败!");
 43                     return;
 44                 }
 45             }
 46             
 47             try {
 48                 
 49                 FileWriter fw=new FileWriter(properFile);
 50                 prop.store(fw, "我是通过properties写进来的");
 51                 OutputStream fw1=new FileOutputStream(fileName.substring(0,fileName.lastIndexOf("."))+".xml");
 52                 prop.storeToXML(fw1, "我是通过properties写进来的");
 53                 fw1.close();
 54                 fw.close();
 55                 
 56                 System.out.println("------------创建Properties文件成功----------");
 57             } catch (IOException e) {
 58                 // TODO Auto-generated catch block
 59                 System.err.print("向properties文件写入数据失败!");
 60                 return;
 61             }
 62         }
 63         
 64         
 65         /***
 66          * 读取properties文件
 67          * @param properFileName
 68          * @return
 69          * @throws IOException
 70          */
 71         public static Properties readProperFile(String properFileName) throws IOException{
 72             
 73             File file =new File(properFileName);
 74              Properties prop=null;
 75             if(!file.exists()){
 76                 
 77                 System.out.print("文件不存在!");
 78                 return null;
 79             }
 80             
 81             try {
 82                 System.out.println("------读取properties文件-------");
 83                 FileReader fr=new FileReader(file);
 84                  //创建一个Properties容器 
 85                 prop = new Properties(); 
 86                 //从流中加载properties文件信息 
 87                 prop.load(fr); 
 88                 //循环输出配置信息 
 89                 for (Object key : prop.keySet()) { 
 90                         System.out.println(key + "=" + prop.get(key)); 
 91                 }
 92                 
 93                 
 94             } catch (FileNotFoundException e) {
 95                 // TODO Auto-generated catch block
 96                 System.out.print("文件不存在!");
 97             }
 98             
 99             return prop;
100         }
101         
102         
103         
104         /***
105          * 修改properties文件,并持久化保存
106          * @param properFileName
107          * @param map
108          * @throws IOException
109          */
110         Public static void modifyProperFile(String properFileName,Map<String,String> map) throws IOException{
111             
112             Properties prop=new Properties();
113             
114             if(properFileName.endsWith(".xml")||properFileName.endsWith(".XML")){
115                 
116                 prop.loadFromXML(new FileInputStream(properFileName));
117                 for(String key:map.keySet()){
118                     prop.put(key, map.get(key));
119                 }
120                 OutputStream os=new FileOutputStream(properFileName); 
121                 prop.storeToXML(os, "我已经被修了");
122                 os.close();
123             }else{
124                 prop.load(new FileReader(properFileName));
125                 for(String key:map.keySet()){
126                     prop.put(key, map.get(key));
127                 }
128                 FileWriter fw=new FileWriter(properFileName);
129                 prop.store(fw, "我已经被修改了");
130                 fw.close();
131             }
132         }
133 }

运行结果图:

原文地址:https://www.cnblogs.com/zhishengyong/p/3788467.html