java读取properties配置文件总结
java读取properties配置文件总结
在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等。而我们经常读取配置文件的方法有以下两种:
(1).使用getResourceAsStream()方法读取配置文件。
(2).使用InputStream()流去读取配置文件。
注意:在使用getResourceAsStream()读取配置文件时,要特别注意配置文件的路径的写法。
this.getClass.getResourceAsStream(fileName)..使用类和资源文件在同一目录下;
this.getclass.getLoader.getResourceAsStream(fileName)..资源文件和classes同级。
下面,我以一个实例来具体讲述分别使用上述两种方法来读取.properties配置文件。
1.项目结构
在项目中,.properties文件的存放路径基本有以上4种,所有在下面的测试中我会用2种方法读取上面的4种不同路径下的.properties文件。(对应上面的4个配置文件)
(1).src下面config.properties包内的配置文件;
1 name=\u5F20\u4E09 2 age=23
(2).和使用配置文件位于同一包里面的.properties配置文件;
1 name=\u674E\u56DB 2 age=14
(3).src根目录下面的配置文件;
1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/goods 3 jdbc.usename=root 4 jdbc.password=123456
(4).位于另外一个source文件夹里面的配置文件。
1 dbuser=user 2 dbpassword=root 3 database=javaTest
2.java读取properyies配置文件
首先,创建读取.properties的工具类PropertiesUtil.java
代码清单【1】
1 package read.propertiesFile.test; 2 3 import java.io.BufferedInputStream; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.text.MessageFormat; 9 import java.util.Properties; 10 11 12 /** 13 * java读取properties配置文件工具类 14 * @author Administrator 15 * 16 * 2016/12/04 17 */ 18 public class PropertiesUtil 19 { 20 public static final PropertiesUtil INSTANCE = new PropertiesUtil(); 21 22 public static PropertiesUtil getInstance() 23 { 24 return INSTANCE; 25 } 26 /** 27 * 1.使用getSourceAsStream读取配置文件 28 */ 29 public void readPropertiesByGetSourceAsStream() 30 { 31 /* 32 * 1.src下面config.properties包内的配置文件 33 * test1.properties 34 */ 35 InputStream is1 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("config/properties/test1.properties"); 36 37 /* 38 * 2.读取和JavaReadPropertiesTest类位于同一个包里面的配置文件 39 * test2.properties 40 */ 41 InputStream is2 = JavaReadPropertiesTest.class.getResourceAsStream("test2.properties"); 42 43 /* 44 * 3.读取根目录下面的配置文件 45 * jdbc.properties 46 */ 47 InputStream is3 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); 48 49 /* 50 * 4.读取位于另外一个source文件夹里面的配置文件 51 * config.properties 52 */ 53 InputStream is4 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("config.properties"); 54 Properties p = new Properties(); 55 System.out.println("使用getSourceAsStream()读取配置文件..."); 56 try 57 { 58 System.out.println("---读取is1开始---"); 59 p.load(is1); 60 System.out.println("test1.properties:name = "+ p.getProperty("name") 61 + ",age = " + p.getProperty("age")); 62 System.out.println("---读取is1结束---"); 63 System.out.println("-----------------------------------------------"); 64 65 System.out.println("---读取is2开始---"); 66 p.load(is2); 67 System.out.println("test2.properties:name = "+ p.getProperty("name") 68 + ",age = " + p.getProperty("age")); 69 System.out.println("---读取is2结束---"); 70 System.out.println("-----------------------------------------------"); 71 72 System.out.println("---读取is3开始---"); 73 p.load(is3); 74 System.out.println("jdbc.properties:"); 75 // 这里的%s是java String占位符 76 System.out.println(String.format("jdbc.driver=%s",p.getProperty("jdbc.driver"))); 77 System.out.println(String.format("jdbc.url=%s",p.getProperty("jdbc.url"))); 78 System.out.println(String.format("jdbc.usename=%s",p.getProperty("jdbc.usename"))); 79 System.out.println(String.format("jdbc.password=%s",p.getProperty("jdbc.password"))); 80 System.out.println("---读取is3结束---"); 81 System.out.println("-----------------------------------------------"); 82 83 System.out.println("---读取is4开始---"); 84 p.load(is4); 85 System.out.println(MessageFormat.format("dbuser={0}", p.getProperty("dbuser"))); 86 System.out.println(MessageFormat.format("dbpassword={0}", p.getProperty("dbpassword"))); 87 System.out.println(MessageFormat.format("database={0}", p.getProperty("database"))); 88 System.out.println("---读取is4结束---"); 89 } 90 catch (IOException e) 91 { 92 e.printStackTrace(); 93 } 94 finally 95 { 96 if(null != is1) 97 { 98 try { 99 is1.close(); 100 } 101 catch (IOException e) 102 { 103 e.printStackTrace(); 104 } 105 } 106 107 if(null != is2) 108 { 109 try { 110 is2.close(); 111 } 112 catch (IOException e) 113 { 114 e.printStackTrace(); 115 } 116 } 117 118 if(null != is3) 119 { 120 try { 121 is3.close(); 122 } 123 catch (IOException e) 124 { 125 e.printStackTrace(); 126 } 127 } 128 129 if(null != is4) 130 { 131 try { 132 is4.close(); 133 } 134 catch (IOException e) 135 { 136 e.printStackTrace(); 137 } 138 } 139 } 140 } 141 142 /** 143 * 2.使用InputStream读取配置文件 144 */ 145 public void readPropertiesByInputStream() 146 { 147 InputStream is1 = null; 148 InputStream is2 = null; 149 InputStream is3 = null; 150 InputStream is4 = null; 151 System.out.println("使用InputStream读取配置文件..."); 152 try 153 { 154 /* 155 * 1.src下面config.properties包内的配置文件 156 * test1.properties 157 */ 158 is1 = new BufferedInputStream(new FileInputStream("src/config/properties/test1.properties")); 159 160 /* 161 * 2.读取和JavaReadPropertiesTest类位于同一个包里面的配置文件 162 * test2.properties 163 */ 164 is2 = new BufferedInputStream(new FileInputStream("src/read/propertiesFile/test/test2.properties")); 165 166 /* 167 * 3.读取根目录下面的配置文件 168 * jdbc.properties 169 */ 170 is3 = new BufferedInputStream(new FileInputStream("src/jdbc.properties")); 171 172 /* 173 * 4.读取位于另外一个source文件夹里面的配置文件 174 * config.properties 175 */ 176 is4 = new BufferedInputStream(new FileInputStream("config/config.properties")); 177 178 Properties p = new Properties(); 179 180 System.out.println("---读取is1开始---"); 181 p.load(is1); 182 System.out.println("test1.properties:name = "+ p.getProperty("name") 183 + ",age = " + p.getProperty("age")); 184 System.out.println("---读取is1结束---"); 185 System.out.println("-----------------------------------------------"); 186 187 System.out.println("---读取is2开始---"); 188 p.load(is2); 189 System.out.println("test2.properties:name = "+ p.getProperty("name") 190 + ",age = " + p.getProperty("age")); 191 System.out.println("---读取is2结束---"); 192 System.out.println("-----------------------------------------------"); 193 194 System.out.println("---读取is3开始---"); 195 p.load(is3); 196 System.out.println("jdbc.properties:"); 197 System.out.println(String.format("jdbc.driver=%s",p.getProperty("jdbc.driver"))); 198 System.out.println(String.format("jdbc.url=%s",p.getProperty("jdbc.url"))); 199 System.out.println(String.format("jdbc.usename=%s",p.getProperty("jdbc.usename"))); 200 System.out.println(String.format("jdbc.password=%s",p.getProperty("jdbc.password"))); 201 System.out.println("---读取is3结束---"); 202 System.out.println("-----------------------------------------------"); 203 204 System.out.println("---读取is4开始---"); 205 p.load(is4); 206 System.out.println("config.properties:"); 207 System.out.println(MessageFormat.format("bduser={0}", p.getProperty("bduser"))); 208 System.out.println(MessageFormat.format("bdpassword={0}", p.getProperty("bdpassword"))); 209 System.out.println(MessageFormat.format("database={0}", p.getProperty("database"))); 210 System.out.println("---读取is4结束---"); 211 212 } 213 catch (FileNotFoundException e) 214 { 215 e.printStackTrace(); 216 } 217 catch (IOException e) 218 { 219 e.printStackTrace(); 220 } 221 finally 222 { 223 if(null != is1) 224 { 225 try { 226 is1.close(); 227 } 228 catch (IOException e) 229 { 230 e.printStackTrace(); 231 } 232 } 233 234 if(null != is2) 235 { 236 try { 237 is2.close(); 238 } 239 catch (IOException e) 240 { 241 e.printStackTrace(); 242 } 243 } 244 245 if(null != is3) 246 { 247 try { 248 is3.close(); 249 } 250 catch (IOException e) 251 { 252 e.printStackTrace(); 253 } 254 } 255 256 if(null != is4) 257 { 258 try { 259 is4.close(); 260 } 261 catch (IOException e) 262 { 263 e.printStackTrace(); 264 } 265 } 266 } 267 } 268 } 269
然后,JUnit测试 JavaReadPropertiesTest.java
代码清单【2】
1 package read.propertiesFile.test; 2 3 import org.junit.Test; 4 5 /** 6 * java读取properties配置文件 7 * @author Administrator 8 * 9 */ 10 11 public class JavaReadPropertiesTest 12 { 13 /** 14 * 1.使用getSourceAsStream读取配置文件测试 15 */ 16 @Test 17 public void readPropertiesByGetSourceAsStreamTest() 18 { 19 PropertiesUtil.getInstance().readPropertiesByGetSourceAsStream(); 20 } 21 22 23 /** 24 * 2.使用InputStream读取配置文件测试 25 */ 26 @Test 27 public void readPropertiesByInputStreamTest() 28 { 29 PropertiesUtil.getInstance().readPropertiesByInputStream(); 30 } 31 32 33 34 35 }
3.输出结果
1 使用getSourceAsStream()读取配置文件... 2 ---读取is1开始--- 3 test1.properties:name = 张三,age = 23 4 ---读取is1结束--- 5 ----------------------------------------------- 6 ---读取is2开始--- 7 test2.properties:name = 李四,age = 14 8 ---读取is2结束--- 9 ----------------------------------------------- 10 ---读取is3开始--- 11 jdbc.properties: 12 jdbc.driver=com.mysql.jdbc.Driver 13 jdbc.url=jdbc:mysql://localhost:3306/goods 14 jdbc.usename=root 15 jdbc.password=123456 16 ---读取is3结束--- 17 ----------------------------------------------- 18 ---读取is4开始--- 19 dbuser=user 20 dbpassword=root 21 database=javaTest 22 ---读取is4结束--- 23 使用InputStream读取配置文件... 24 ---读取is1开始--- 25 test1.properties:name = 张三,age = 23 26 ---读取is1结束--- 27 ----------------------------------------------- 28 ---读取is2开始--- 29 test2.properties:name = 李四,age = 14 30 ---读取is2结束--- 31 ----------------------------------------------- 32 ---读取is3开始--- 33 jdbc.properties: 34 jdbc.driver=com.mysql.jdbc.Driver 35 jdbc.url=jdbc:mysql://localhost:3306/goods 36 jdbc.usename=root 37 jdbc.password=123456 38 ---读取is3结束--- 39 ----------------------------------------------- 40 ---读取is4开始--- 41 config.properties: 42 bduser=null 43 bdpassword=null 44 database=javaTest 45 ---读取is4结束---
4.补充
在这里,我在简要介绍一下,读取配置文件的全部配置信息的方法,以jdbc.properties文件为例。
1 /** 2 * 3.循环读取配置文件的全部信息 3 */ 4 public void readAllInfo() 5 { 6 /* 7 * 3.读取根目录下面的配置文件 8 * jdbc.properties 9 */ 10 InputStream is3 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); 11 Properties p = new Properties(); 12 System.out.println("---读取is3开始---"); 13 try 14 { 15 p.load(is3); 16 //读取资源文件的所有的key值 17 Enumeration en= p.propertyNames(); 18 System.out.println("读取is3开始..."); 19 while(en.hasMoreElements()) 20 { 21 String key = (String) en.nextElement(); 22 System.out.println(key + "=" + p.getProperty(key)); 23 24 } 25 System.out.println("读取is3结束..."); 26 } 27 catch (IOException e) 28 { 29 e.printStackTrace(); 30 System.out.println("读取资源文件出错"); 31 } 32 finally 33 { 34 if(null != is3) 35 { 36 try 37 { 38 is3.close(); 39 System.out.println("关闭is3..."); 40 } 41 catch (IOException e) 42 { 43 e.printStackTrace(); 44 } 45 } 46 } 47 48 }
输出结果是:
1 ---读取is3开始--- 2 读取is3开始... 3 jdbc.url=jdbc:mysql://localhost:3306/goods 4 jdbc.driver=com.mysql.jdbc.Driver 5 jdbc.usename=root 6 jdbc.password=123456 7 读取is3结束... 8 关闭is3...
至此,读取配置文件的总结就先这样,后期有新的体会时,在进行增加。谢谢观阅。