在准备编写一个通过JDBC实现的轻型增删改查的封装框架之前,先来了解一下加载Properties资源文件的几种方式,有时候,并不需要知道那么多种获取方法,常用的方式就是那几种,但偶尔多了解一些JavaSE中可以获取的方式,也是一种对Java知识的积累和提高。
资源文件(.properties)的使用场景,资源文件是以键值对格式出现,key->value,往往为了便于项目中一些常用的配置属性的编写,也是为了进行全局控制,只要改写资源文件中的值,就可以更改掉项目中引入的所有值,国际化的资源文件,数据库连接的用户名密码等的配置资源文件,常用的提示信息,错误信息都可以使用资源文件,该文主要讲解如何获取资源文件,方式有很多,只要大家在用的时候可以按需所用就可以了。
首先给出项目的结构图,如图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类型,在使用的时候要注意,一定要将路径写对,否则会报空指针,文件路径找不到等异常。
在此祝大家学习愉快!