加载配置文件的四种方式

时间:2023-02-02 11:24:17
   
  1. package day01;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.util.Properties;  
  6. /** 
  7.  * 测试配置文件的读取-config.properties 
  8.  * 读取资源文件的多种方式(四种) 
  9.  */  
  10. public class JDBCDemo2 {  
  11.     public static void main(String[] args) {  
  12.         InputStream is = null;  
  13.         FileInputStream fis = null;//用于读取根目录下的配置文件  
  14.         try{  
  15.             //使用Properties去读取配置文件(建议采用第一种万能的方式来读取资源文件)  
  16.             Properties p = new Properties();  
  17.             /** 
  18.              * 第一种方式: 用类加载器读取资源文件 
  19.              * 适用情形:资源文件和类文件在不在同一目录都可以 
  20.              * 注意:getResourceAsStream里的参数要写资源文件的全限定路径, 
  21.              * 包名+文件名且开头千万不要写"/" 
  22.              */  
  23.             is = JDBCDemo2.class.getClassLoader().  
  24.                 getResourceAsStream("wq/config.properties");//包名+文件名  
  25.               
  26.             /** 
  27.              * 第二种方式: 用类加载器读取资源文件 
  28.              */  
  29. //          is = new FileInputStream("./src/day01/config.properties");//绝对路径(也可使用相对路径)  
  30.               
  31.             /** 
  32.              * 第三种方式:用class.getResourceAsStream()(其实还是用的类加载器) 
  33.              * (1)适用情形:如果资源文件和类文件在同一包下,直接写资源文件的名称就行了, 
  34.              * 注意:资源文件的名称前面不需要加“/” 
  35.              *  
  36.              * (2)若资源文件和类文件不在同一个目录下的情况 
  37.              * 注意:开头一定要加上”/“ 
  38.              *  
  39.              */  
  40. //          is = JDBCDemo2.class.getResourceAsStream("config.properties");  
  41. //          is = JDBCDemo2.class.getResourceAsStream("/wq/config.properties");//(/包名+类名)  
  42.               
  43.             /** 
  44.              * 第四种方式:若配置文件位于根目录下,用FileInputStream流来读取文件,再调用p.load()方法 
  45.              */  
  46. //          fis = new FileInputStream("config.properties");//注意关闭fis流  
  47. //          p.load(fis);  
  48.               
  49.             p.load(is);//p.load(InputStream/InputReader)可传入的参数为字节流或字符流  
  50.             String driver = p.getProperty("driver").trim();  
  51.             String url = p.getProperty("url").trim();  
  52.             String user = p.getProperty("user").trim();  
  53.             String password = p.getProperty("password").trim();  
  54.             System.out.println(driver+"\n"+url+"\n"+user+"\n"+password);  
  55.               
  56.         }catch(Exception e){  
  57.             e.printStackTrace();  
  58.         }finally{  
  59.             //通过Properties读取文件(通过流读取)后,应该关闭流(抛出异常)  
  60.             try {  
  61.                 is.close();  
  62.             } catch (IOException e) {  
  63.                 e.printStackTrace();  
  64.             }  
  65.         }  
  66.     }  
  67. }  
  68. /** 
  69.  * 总结:1.若配置文件在src目录下,则采用FileInputStream fis= new FileInputStream("文件名称"); 
  70.  *      调用p.load(fis)加载即可,最后关闭流 
  71.  *  
  72.  *     2.若文件在其他目录下,src或者其他(例如:resource)路径下,则可以通过 
  73.  *       InputStream is = 类名.class.getClassLoader().getResourceAsStream("包名/文件名"); 
  74.  *       调用p.load(is)加载即可,最后关闭流 
  75.  */  

测试结果如下:

[java] view plain copy
  1. oracle.jdbc.driver.OracleDriver  
  2. jdbc:oracle:thin:@localhost:1521:orcl  
  3. scott  
  4. jsd161102