java.util.Properties*

回眸只為那壹抹淺笑 提交于 2019-12-07 16:28:53

学习目标:

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

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

3、掌握相对路径,能正确书写一个properties文件的相对路径。

一、认识properties文件

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

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

 注    释:前面加上#号

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

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

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

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

例如,下面一个properties文件:

#正确的properties配置文件 

aaa=1\ 
    11 
b 
bb    =     222

#格式良好的properties文件 

aaa=111 
bbb=222

二、解读java.util.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文件:

#格式良好的properties文件 

aaa=111 
bbb=222

测试类:

package stu; 
import java.io.*; 
import java.util.Properties; 
/** 
* Properties类测试 
* User: xiaohui 
* Date: 2008-11-4 21:04:54 
*/ 
public class TestProperties { 
        public static void main(String args[]) throws IOException { 
                testProperties(); 
                test1(); 
        } 
        public static void testProperties() throws IOException { 
                System.out.println("------------testProperties-------------"); 
                //将properties文件加载到输入字节流中 
                InputStream is = new FileInputStream("D:\\myprojects\\lession4\\src\\stu\\ttt.properties");
                //创建一个Properties容器 
                Properties prop = new Properties(); 
                //从流中加载properties文件信息 
                prop.load(is); 
                //循环输出配置信息 
                for (Object key : prop.keySet()) { 
                    System.out.println(key + "=" + prop.get(key)); 
                } 
                //定义一个输出流 
                OutputStream os1 = new FileOutputStream("C:\\ttt.xml"); 
                OutputStream os2 = new FileOutputStream("C:\\ttt.properties"); 
                //从Properties对象导出导出到xml 
                prop.storeToXML(os1, "我从properties导出的XML配置文件"); 
                //从Properties对象导出properties文件 
                prop.store(os2, "我从properties导出的XML配置文件"); 
                is.close(); 
                os1.close(); 
                os2.close(); 
                //从xml加载配置信息,填充Properties容器 
                prop.loadFromXML(new FileInputStream("C:\\ttt.xml")); 
                //循环输出配置信息 
                System.out.println("我从导出的xml加载配置文件信息!"); 
                for (Object key : prop.keySet()) { 
                    System.out.println(key + "=" + prop.get(key)); 
                } 
                //修改Properties对象,并持久化到一个文件 
                prop.put("呵呵呵", "嘎嘎嘎"); 
                OutputStream os3 = new FileOutputStream("C:\\ttt1.xml"); 
                prop.storeToXML(os3, "我从properties导出的XML配置文件"); 
                os3.close(); 
        } 
        /** 
         * 以相对路径方式加载properties文件 
         * 
         * @throws IOException 
         */ 
        public static void test1() throws IOException { 
                System.out.println("------------test1-------------"); 
                Properties p = new Properties(); 
                p.load(TestProperties.class.getResourceAsStream("/stu/ttt.properties")); 
                for (Object key : p.keySet()) { 
                    System.out.println(key + "=" + p.get(key)); 
                } 
        } 
}

运行结果:

------------testProperties------------- 

bbb=222 

aaa=111 

我从导出的xml加载配置文件信息! 

bbb=222 

aaa=111 

------------test1------------- 

bbb=222 

aaa=111 

上面文章转载链接:java.util.Properties类 学习笔记


下面是实际项目里用到的实例

首先目录结构是这样的


public static void testProperties()
{
    Properties properties = this.loadProperties();
    System.out.println(properties.getProperty("key"));
}

public static Properties loadProperties() {
    Properties properties = new Properties();
    try {
      properties.load(Util.class.getClassLoader().getResourceAsStream("storm_config.properties"));
    } catch (FileNotFoundException e) {
      Log.error("找不到配置文件config.properties。", e);
      throw new RuntimeException("找不到配置文件config.properties。");
    } catch (IOException e) {
      Log.error("获取配置文件config.properties出错", e);
      throw new RuntimeException("获取配置文件config.properties出错");
    } catch (Exception e) {
      Log.error("获取配置文件config.properties出错", e);
      throw new RuntimeException("获取配置文件config.properties出错");
    }
    return properties;
  }

关于.properties文件的路径,这里面有很多猫腻,在项目上右键新建Source Folder,名称为resources,这样resource下面的.properties才会和src下面的源代码编译在一起,可以打开Navigator窗口查看(如果是别的Folder,则不会编译在一起)。还有如果加了‘/’,表示跟目录,如果没加则表示当前文件目录,具体目录结构,可以查看下面这篇文章。

java读取properties文件的几种方法


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!