關鍵字: java讀取properties配置檔案 今天要将以前一個項目的資料連接配接改成從properties檔案中配置。找了好久,網上也不少,可就是讀取檔案時總是找不到檔案在哪(我放在classes目錄下了)。最後終于成功,記下,以做紀念。
java代碼
package com.web.connection;
import java.io.ioexception;
import java.io.inputstream;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.sqlexception;
import java.util.properties;
import java.util.logging.level;
import java.util.logging.logger;
public class conn {
private string filename="/db.properties";//這裡是指放在classes下,如果有包的話,前面加包名即可。例:/com/web/db.properties
private string driver = "";
private string url = "";
private string username ="";
private string password = "";
connection conn=null;
public connection getconn(){
properties p = new properties();
try {
inputstream in = conn.class.getresourceasstream(filename);// 與類在同一級,也可用/package/path/to/filename
p.load(in);
in.close();
if(p.containskey("driver")){
this.driver = p.getproperty("driver");
}
if(p.containskey("url")){
this.url = p.getproperty("url");
if(p.containskey("user")){
this.username = p.getproperty("user");
if(p.containskey("password")){
this.password = p.getproperty("password");
} catch (ioexception ex) {
logger.getlogger(conn.class.getname()).log(level.severe, null, ex);
system.out.println(p.getproperty("driver"));
class.forname(this.driver);
conn = drivermanager.getconnection(this.url,this.username,this.password);
} catch (sqlexception ex) {
ex.printstacktrace();
system.out.print("擷取連接配接異常");
} catch (classnotfoundexception ex) {
system.out.print("加載驅動出錯");
ex.printstacktrace();;
return conn;
網上文章常見的幾種讀取.properties檔案的方式
1、使用java.util.properties類的load()方法 示例:
inputstream in = lnew bufferedinputstream(new fileinputstream(name));
properties p = new properties();
p.load(in);
2、使用java.util.resourcebundle類的getbundle()方法
示例:
resourcebundle rb = resourcebundle.getbundle(name, locale.getdefault());
用resourcebundle讀取.properties檔案可避免路徑問題
我在jar裡讀取.properties檔案時,總是找不到檔案路徑,後來用resourcebundle讀取.properties檔案即可避免路徑問題,代碼如下:
//process為檔案名,切記不要加 .properties, url是檔案裡的鍵名
resourcebundle bundle = resourcebundle.getbundle("com.ihandy.smsoc.app.process");
string s = bundle.getstring("url");
system.out.println(s);
purl = s;
3、使用java.util.propertyresourcebundle類的構造函數
inputstream in = new bufferedinputstream(new fileinputstream(name));
resourcebundle rb = new propertyresourcebundle(in);
4、使用class變量的getresourceasstream()方法
inputstream in = 類名.class.getresourceasstream(name);
p.load(in);
5、使用class.getclassloader()所得到的java.lang.classloader的getresourceasstream()方法 示例:
inputstream in = 類名.class.getclassloader().getresourceasstream(name);
6、使用java.lang.classloader類的getsystemresourceasstream()靜态方法 示例:
inputstream in = classloader.getsystemresourceasstream(name);
7、servlet中可以使用javax.servlet.servletcontext的getresourceasstream()方法 示例:
inputstream in = context.getresourceasstream(path);