天天看點

java讀取properties檔案

關鍵字: 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);