阐述JavaSE中获取properties资源文件的多种方式

    在准备编写一个通过JDBC实现的轻型增删改查的封装框架之前,先来了解一下加载Properties资源文件的几种方式,有时候,并不需要知道那么多种获取方法,常用的方式就是那几种,但偶尔多了解一些JavaSE中可以获取的方式,也是一种对Java知识的积累和提高。

    资源文件(.properties)的使用场景,资源文件是以键值对格式出现,key->value,往往为了便于项目中一些常用的配置属性的编写,也是为了进行全局控制,只要改写资源文件中的值,就可以更改掉项目中引入的所有值,国际化的资源文件,数据库连接的用户名密码等的配置资源文件,常用的提示信息,错误信息都可以使用资源文件,该文主要讲解如何获取资源文件,方式有很多,只要大家在用的时候可以按需所用就可以了。

    首先给出项目的结构图,如图1所示:

阐述JavaSE中获取properties资源文件的多种方式_第1张图片

          图1

    在这个结构图中,只有PropertiesLoad.java(com.steven.util包下)和jdbc.properties(src路径下)这两个文件是为了阐述本文的主旨,其他的项目文件会在接下来的轻型JDBC框架封装中讲解用到。

    首先给出jdbc.properties文件内容,本文给出的是 Mysql数据库的配置信息

jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/steven
user=root
password=mysqladmin
    然后给出如何获取资源文件的java代码PropertiesLoad.java(com.steven.util包下)

PropertiesLoad.java

package com.steven.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Locale;
import java.util.Properties;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;

/**
 * 阐述java中加载 properties资源文件的六种方式
 * 
 * @author Steven
 * 
 */
public class PropertiesLoad {
	private static Properties pro = new Properties();

	public static void main(String[] args) throws Exception {
		loadModeA();
		loadModeB();
		loadModeC();
		loadModeD();
		loadModeE();
		loadModeF();
	}

	/**
	 * 第一种加载Properties资源文件的方式 
	 * 通过输入流获取,需要加载文件所在的路径,
	 * pathname需要从src开始写出具体的路径,如果此时jdbc.properties放在com.steven.util的包路径下,
	 * 此时的pathname应该src/com/steven/util/jdbc.properties这样写
	 * 
	 * @throws Exception
	 */
	public static void loadModeA() throws Exception {
		FileInputStream fis = new FileInputStream(new File(
				"src/jdbc.properties"));
		pro.load(fis);
		System.out.println("------第一种方式获取资源文件内容--------");
		System.out.println(pro.getProperty("driver"));
		System.out.println(pro.getProperty("url"));
		System.out.println(pro.getProperty("user"));
		System.out.println(pro.getProperty("password"));
		System.out.println();
	}

	/**
	 * 第二种加载Properties资源文件的方式 
	 * 使用类加载器中根据文件名称加载资源文件,文件需要放在src根的路径下
	 * 如果同样放在com.steven.util包路径下,name需要这样写com/steven/util/jdbc.properties
	 * 
	 * @throws Exception
	 */
	public static void loadModeB() throws Exception {

		InputStream is = ClassLoader
				.getSystemResourceAsStream("jdbc.properties");
		pro.load(is);
		System.out.println("------第二种方式获取资源文件内容--------");
		System.out.println(pro.getProperty("driver"));
		System.out.println(pro.getProperty("url"));
		System.out.println(pro.getProperty("user"));
		System.out.println(pro.getProperty("password"));
		System.out.println();
	}

	/**
	 * 第三种加载Properties资源文件的方式
	 * 这种方式加载的路径是从当前类的路径下开始加载,如果资源文件放在了com.steven.util包路径下
	 * name只要写jdbc.properties,此时是放在src路径下,所以要用../返回到src路径下才可以加载
	 * 
	 * @throws Exception
	 */
	public static void loadModeC() throws Exception {
		InputStream is = PropertiesLoad.class
				.getResourceAsStream("../../../jdbc.properties");
		pro.load(is);
		System.out.println("------第三种方式获取资源文件内容--------");
		System.out.println(pro.getProperty("driver"));
		System.out.println(pro.getProperty("url"));
		System.out.println(pro.getProperty("user"));
		System.out.println(pro.getProperty("password"));
		System.out.println();
	}

	/**
	 * 第四种加载Properties资源文件的方式
	 * 默认从src路径下加载资源文件,如果同样放在com.steven.util的包路径下,
	 * name应该这样写com/steven/util/jdbc.properties
	 * 
	 * @throws Exception
	 */
	public static void loadModeD() throws Exception {
		InputStream is = PropertiesLoad.class.getClassLoader()
				.getResourceAsStream("jdbc.properties");
		pro.load(is);
		System.out.println("------第四种方式获取资源文件内容--------");
		System.out.println(pro.getProperty("driver"));
		System.out.println(pro.getProperty("url"));
		System.out.println(pro.getProperty("user"));
		System.out.println(pro.getProperty("password"));
		System.out.println();
	}

	/**
	 * 第五种加载Properties资源文件的方式 
	 * 默认从src路径开始加载,但不要写后缀名称,如果同样放到com.steven.util包路径下,
	 * baseName应该这样写com/steven/util/jdbc,同样不需要写后缀名
	 * 
	 * @throws Exception
	 */
	public static void loadModeE() throws Exception {
		ResourceBundle rb = ResourceBundle.getBundle("jdbc", Locale
				.getDefault());
		System.out.println("------第五种方式获取资源文件内容--------");
		System.out.println(rb.getString("driver"));
		System.out.println(rb.getString("url"));
		System.out.println(rb.getString("user"));
		System.out.println(rb.getString("password"));
		System.out.println();
	}

	/**
	 * 第六种加载Properties资源文件的方式 
	 * 加载路径的填写同第一种方式
	 * 
	 * @throws Exception
	 */
	public static void loadModeF() throws Exception {
		InputStream is = new BufferedInputStream(new FileInputStream(new File(
				"src/jdbc.properties")));
		ResourceBundle rb = new PropertyResourceBundle(is);
		System.out.println("------第六种方式获取资源文件内容--------");
		System.out.println(rb.getString("driver"));
		System.out.println(rb.getString("url"));
		System.out.println(rb.getString("user"));
		System.out.println(rb.getString("password"));
	}

}

    下面给出代码运行结果:

            

------第一种方式获取资源文件内容--------
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/steven
root
mysqladmin

------第二种方式获取资源文件内容--------
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/steven
root
mysqladmin

------第三种方式获取资源文件内容--------
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/steven
root
mysqladmin

------第四种方式获取资源文件内容--------
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/steven
root
mysqladmin

------第五种方式获取资源文件内容--------
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/steven
root
mysqladmin

------第六种方式获取资源文件内容--------
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/steven
root
mysqladmin

    注:在这里仅仅是为了演示这几种获取资源文件的方式,在使用的时候都可以进行使用,可以根据自己需要使用相应的方式。
    在每种方式的注释中,都详细讲解了怎样获取相应的路径,对于使用文件流的方式获取的路径称作pathname,使用加载器加载的路径称为name,使用国际化ResourceBundle的方式获取,路径称作baseName,都是String类型,在使用的时候要注意,一定要将路径写对,否则会报空指针,文件路径找不到等异常。

    在每种方式的注释中,都详细讲解了怎样获取相应的路径,对于使用文件流的方式获取的路径称作pathname,使用加载器加载的路径称为name,使用国际化ResourceBundle的方式获取,路径称作baseName,都是String类型,在使用的时候要注意,一定要将路径写对,否则会报空指针,文件路径找不到等异常。

    在此祝大家学习愉快!

你可能感兴趣的:(java,properties,资源文件,ResourceBundle)