properties配置文件读取操作总结【java笔记】

声明:本文所有例子中的 properties 文件均放在 src 目录下,ecclipse 软件自动增加

一、基本概念

  1.1 

    properties文件,存储格式 键=值。

    properties文件特点:

      1、键值对格式
      2、“ = ”等号后面,值前面,的空格,会自动忽略掉
      3、值后面的空格,不会忽略
      4、“ = ”等号后面的双引号,不会忽略
      5、“ # ”井号后面内容,为注释,忽略

  1.2 Java的 Properties 类 属性映射(property map)

  是一种存储键/值对的数据结构。属性映射经常被用来存放配置信息。

  它有三个特性:

    1. 键和值斗志字符串

    2. 键/值对可以很容易地写入文件或从文件读出

    3. 用二级表存放默认值

  实现属性映射的Java类被称为 Properties(Java.util.Properties),此类是Java中比较重要的类,

  主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,

  这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置,提高程序的可扩展性。

  此类是线程安全的:多个线程可以共享单个 Properties 对象而无需进行外部同步。

  构造方法:

    • Properties() 创建一个无默认值的空属性列表。
    • Properties( Properties defaults ) 创建一个带有指定默认值的空属性列表。

  它提供了几个主要的方法:
    getProperty ( String key):用指定的键在此属性列表中搜索属性。也就是通过参数 key ,得到 key 所对应的 value。

    load ( InputStream inStream):从输入流中读取属性列表(键和元素对)。通过对指定的文件(比如说上面的 test.properties 文件)进行装载来获取该文件中的所有键 - 值对。以供 getProperty ( String key) 来搜索。

    setProperty ( String key, String value) :底层调用 Hashtable 的方法 put 。他通过调用基类的put方法来设置 键 - 值对。

    store ( OutputStream out, String comments):以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。与 load 方法相反,该方法将键 - 值对写入到指定的文件中去。

    clear ():清除所有装载的 键 - 值对。该方法在基类中提供。

    注意:因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。相反,应该使用 setProperty 方法。

    如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。

    类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败。

二、Java读取Properties文件的方法

  2.1 Java虚拟机(JVM)有自己的系统配置文件(system.properties)

//获取JVM的系统属性
import java.util.Properties;
public class ReadJVM {
    public static void main(String[] args) {
        Properties pps = System.getProperties();
        pps.list(System.out);
    }
}  

  2.2 使用 J2SE API 读取 Properties 文件的六种方法

  方法一:java.util.Properties类的 load() 方法

    InputStream in = new BufferedInputStream(new FileInputStream(name));
    Properties p = new Properties();
    p.load(in);

  /**
     * 注意:配置文件一定要放到项目的根目录。
     */
    @Test
    public void run1() {
        try {
            FileInputStream is = new FileInputStream("src/my-ini.properties");
            Properties pop = new Properties();
            try {
                pop.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Enumeration em = pop.propertyNames();
            while(em.hasMoreElements()) {
                String key = (String) em.nextElement();
                String value = pop.getProperty(key);
                System.out.println(key+"="+value);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

  方法二:使用class变量的getResourceAsStream()方法

    InputStream in = JProperties.class.getResourceAsStream(name);
    Properties p = new Properties();
    p.load(in);

    /**
     * 注意:配置文件一定要放到当前目录下。
     * (目录层次也可以从src下面的文件夹开始但不必包含src,且不必包含反斜杠开头。)
     * 本方法在 PropertiesDemo1 类中
     */
    @Test
    public void run2() {
        Properties pop = new Properties();
        try{
            InputStream in = PropertiesDemo1.class.getResourceAsStream("/my-ini.properties");
            pop.load(in);
        }catch(Exception ex) {
            ex.printStackTrace();
        }
        Enumeration em = pop.propertyNames();
        while(em.hasMoreElements()) {
            String key = (String) em.nextElement();
            String value = pop.getProperty(key);
            System.out.println(key+"="+value);
        }

    }

  方法三:使用 class.getClassLoader() 所得到的 java.lang.ClassLoader 的 getResourceAsStream() 方法

    InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
    Properties p = new Properties();
    p.load(in);

  /**
     * 注意:
     * 配置文件一定要放在 bin 目录下   * 注意 eclipse 软件自动将src中的配置文件复制到 bin 目录下
     */
    @Test
    public void run3() {
        Properties pop = new Properties();
        try{
            InputStream in = PropertiesDemo1.class.getClassLoader().getResourceAsStream("my-ini.properties");
            pop.load(in);
        }catch(Exception ex) {
            ex.printStackTrace();
        }
        Enumeration em = pop.propertyNames();
        while(em.hasMoreElements()) {
            String key = (String) em.nextElement();
            String value = pop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }

  方法四:使用 java.lang.ClassLoader 类的 getSystemResourceAsStream() 静态方法

    InputStream in = ClassLoader.getSystemResourceAsStream(name);
    Properties p = new Properties();
    p.load(in);

   /**
     * 注意:
     * 配置文件一定要放在 bin 目录下
     */
    @Test
    public void run4() {
        Properties pop = new Properties();
        try{
            InputStream in = ClassLoader.getSystemResourceAsStream("my-ini.properties");
            pop.load(in);
        }catch(Exception ex) {
            ex.printStackTrace();
        }
        Enumeration em = pop.propertyNames();
        while(em.hasMoreElements()) {
            String key = (String) em.nextElement();
            String value = pop.getProperty(key);
            System.out.println(key+"="+value);
        }
    }

  方法五:使用 java.util.ResourceBundle 类的 getBundle() 方法

    ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

  /**
     * 注意:
     * 配置文件一定要放在 bin 目录下
     */
    @Test
    public void run5() {
        ResourceBundle rs = ResourceBundle.getBundle("my-ini");

        String driver = rs.getString("driver");
        String url = rs.getString("url");
        String user = rs.getString("user");
        String password = rs.getString("password");

        System.out.println("driver="+driver);
        System.out.println("url="+url);
        System.out.println("user="+user);
        System.out.println("password="+password);
    }

  方法六:使用 java.util.PropertyResourceBundle 类的构造函数

  @Test
    public void run6() {
        File file = new File("src/my-ini.properties");
        try {
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
            try {
                PropertyResourceBundle prb = new PropertyResourceBundle(in);

                String driver = prb.getString("driver");
                String url = prb.getString("url");
                String user = prb.getString("user");
                String password = prb.getString("password");

                System.out.println("driver="+driver);
                System.out.println("url="+url);
                System.out.println("user="+user);
                System.out.println("password="+password);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

引用博文: 

JAVA操作properties配置文件——总结(Locale&ResourceBundle& PropertyResourceBundle(http://blog.csdn.net/fanxiaobin577328725/article/details/52071310)

时间: 2024-10-11 06:15:03

properties配置文件读取操作总结【java笔记】的相关文章

Spring Boot的properties配置文件读取

我在自己写点东西玩的时候需要读配置文件,又不想引包,于是打算扣点Spring Boot读取配置文件的代码出来,当然只是读配置文件没必要这么麻烦,不过反正闲着也是闲着,扣着玩了.具体启动过程以前的博客写过Spring Boot启动过程(一),这次入口在SpringApplication类中: private ConfigurableEnvironment prepareEnvironment( SpringApplicationRunListeners listeners, Application

Linux下配置文件读取操作流程及其C代码实现

一.概述 Linux具有免费.可靠.安全.稳定.多平台等特点,因此深受广大程序员的欢迎. 为了体现软件产品的灵活性,可添加配置文件存放某些重要的参数,在部署的时候根据实际的安装环境对每个配置项的值进行设置.这就要求程序能够准确读取到各个配置项的值. 本文详细介绍了Linux下配置文件的读取方法及读取操作的C代码实现,为相关的软件开发工作的开展提供了有益的参考. 二.配置文件介绍 为了便于程序处理,对配置文件的命名及内容格式有一些约定,具体如下: 第一,配置文件的后缀为ini,如本文中使用到的配置

对Java配置文件Properties的读取、写入与更新操作

http://breezylee.iteye.com/blog/1340868 对Java配置文件Properties的读取.写入与更新操作 博客分类: javase properties 对Java配置文件Properties的读取.写入与更新操作注:当前项目路径是String filepath=System.getProperty("user.dir"); 对下面的程序很有用... /*** 实现对Java配置文件Properties的读取.写入与更新操作*/package tes

Java配置文件Properties的读取、写入与更新操作

/** * 实现对Java配置文件Properties的读取.写入与更新操作 */ package test; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;

java读取.properties配置文件的几种方法

读取.properties配置文件在实际的开发中使用的很多,总结了一下,有以下几种方法(仅仅是我知道的):一.通过jdk提供的java.util.Properties类.此类继承自java.util.HashTable,即实现了Map接口,所以,可使用相应的方法来操作属性文件,但不建议使用像put.putAll这两个方法,因为put方法不仅允许存入String类型的value,还可以存入Object类型的.因此java.util.Properties类提供了getProperty()和setPr

java对properties配置文件的读写操作

1.1.  对properties配置文件的读取 1.1.1.  要读取的文件 配置文件key和value之间用冒号[:]和等于号[=]都是可以的. Test.properties name:\u5F20\u4E09 password:\u5BC6\u7801 age:22 1.1.2.  读取的程序代码 PropertiesTest.java /** * 读取配置文件 * @throws IOException */ @Test public void read() throws IOExce

Java读取properties配置文件常用方法

在开发中对properties文件的操作还是蛮经常的,所以总结了几种操作方法,为后面的开发可以进行参考. 1.通过java.util.ResourceBundle类来读取 这边测试用到了枚举类进行传入文件的key值,然后获取value,可以进行灵活的配置. 通过这种方式读取properties文件不需要加.properties后缀名,只需文件名即可,如果有放在某一个包下,要加包的限定名,如放在com.frame.util包下,则要路径要用com/fram/util config.properti

java读取properties配置文件总结

java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1).使用getResourceAsStream()方法读取配置文件. (2).使用InputStream()流去读取配置文件. 注意:在使用getResourceAsStream()读取配置文件时,要特别注意配置文件的路径的写法. this.getClass.getResourceAsStream(f

java properties类读取配置文件

1.JAVA Properties类,在java.util包里,具体类是java.util.properties.Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地方,就是它的键和值都是字符串类型.2.properties类是集合类,里面要填充keyvalue键值对.将.properties文件里的信息加载到properties对象中.3.将.properties文件里的信息加载到properties对象