亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java程序中的配置文件的存放和讀取

2019-11-17 04:17:34
字體:
來源:轉載
供稿:網友

 大家可能經常會遇到在java程序中存取程序配置文件的需求,比如,為了能夠和不同的數據庫連接,我們經常把數據庫連接的信息存放到屬性文件中,這些信息一般包括數據庫驅動程序類名、數據庫連接的URL,數據庫的用戶名和口令等等。為了便于程序的安裝或部署,我們經常會把這些的配置文件存放到程序安裝的根目錄中。由于Java程序用包來分組類,有時候將這些配置文件放入到讀取它們的類所在的包目錄中會更好一些。比如,在下面的圖示中,將數據庫配置文件 database.PRoperties放到數據庫讀取類所在的包目錄就是一種比較清晰的存儲方案:

|-----------其它包目錄
|
|
-------edu.ec.database
|
|---------------ConnectionPool(數據庫連接池類)
|
|---------------Dao(數據庫訪問對象類)
|
|---------------DaoFactory(Dao的工廠類)
|
|---------------database.properties(數據庫配置屬性文件)
|
|---------------RecordSet(記錄集類)

  在這種存儲方案中,所有的與數據庫相關的類和配置文件都在同一個包目錄中;在開發過程中,配置文件和源文件也按采用這種方式進行組織,這樣會使得程序的數據庫訪問維護變得相當清晰明了。

  大部分開發工具在編譯打包這樣的源文件組織時,會自動將相關配置文件和類文件放到生成的目標文件夾中或JAR文件中。一般情況下,我們在發布自己的 Java程序時,都是以JAR或WAR形式將程序打包發布,而對應的配置文件也會按照上述的目錄格式被放到了JAR或WAR文件中,這樣,就實現了配置文件和程序文件打包在一起發布的目的。

  現在的問題是,我們如何讀取位于程序安裝文件中的配置文件的信息?比如,在上面的圖中, ConnectionPool是一個數據庫連接池類,它需要在系統啟動時自動讀取存儲在database.properties中的數據庫連接和配置信息,以便設置相關的數據庫連接。這樣,我們 就需要在程序中測定目前程序安裝或部署的位置,以便讀取對應的屬性文件。

  在很多其他語言編寫的程序中,我們可以利用一些系統提供的API或一些全局對象獲取目前應用程序運行所在的目錄。比如VB,我們可以使用application對象測定當前程序的安裝位置,在Java程序中如何完成類似的任務呢?

  Java程序并沒有類似于VB那種全局對象,但如果我們觀察位于上述目錄結構中的database.properties文件,應該發現其處于應用程序的 CLASSPATH中,這樣,我們就可以使用Java中的類裝載器中的相關的方法,讀出這些配置文件的信息,該類名為ClassLoader.比如,在上例中,我們可以先得到ConnectinPool的類裝載器,然后測定ConnectionPool類所在的包路徑,然后利用 ConnectionPool所在的包目錄讀出database.properties文件的信息,對應的偽代碼如下:

ClassLoader loader=ConnectionPool.class.getClassLoader();
得到ConnectionPool所在的包名;
將包名轉換為對應的目錄名,存入一個名為path的字符串變量中;
調用loader的getResourceAsStream(path+"database.properties"),得到輸入流

  下面是一個可實際運行的樣例代碼片段,它可自動測定傳入的類所在的包目錄,返回傳入的屬性文件所代表的輸入流。它還有一個附加的功能:如果屬性文件直接放到了當前類所在的根目錄(比如位于JAR文件的根目錄或WAR文件的WEB-INF/classes目錄中)、系統的用戶目錄系統、系統其他的類路徑中時,它也可以找到;當然,如果還是找不到,它將返回null.具體的代碼如下:

public class PropHelper{
/**
*guessPropFile:
*@param cls:和要尋找的屬性文件處于相同的包中的任意的類
*@param propFile:要尋找的屬性文件名
*/
public static java.io.InputStream guessPropFile(Class cls,String propFile){
try{
//得到類的類裝載器
ClassLoader loader=cls.getClassLoader();

//先從當前類所處路徑的根目錄中尋找屬性文件
java.io.InputStream in=loader.getResourceAsStream(propFile);
if(in!=null) return in;

//沒有找到,就從該類所處的包目錄中查找屬性文件
Package pack=cls.getPackage();
if(pack!=null){
String packName=pack.getName();
String path="";
if(packName.indexOf(".") < 0 )
path=packName+"/";
else{
int start=0,end=0;
end=packName.indexOf(".");
while(end!=-1){
path=path+packName.substring(start,end)+"/";
start=end+1;
end=packName.indexOf(".",start);
}
path=path+packName.substring(start)+"/";
}
in=loader.getResourceAsStream(path+propFile);
if(in!=null) return in;
}

//如果沒有找到,再從當前系統的用戶目錄中進行查找
java.io.File f=null;
String curDir=System.getProperty("user.dir");
f=new java.io.File(curDir,propFile);
if(f.exists()) return new java.io.FileInputStream(f);

//如果還是沒有找到,則從系統所有的類路徑中查找
String classpath=System.getProperty("java.class.path");
String[] cps=classpath.split(System.getProperty("path.separator"));

for(int i=0;i < cps.length; i++){
f=new java.io.File(cps[i],propFile);
if(f.exists()) break;
f=null;
}
if(f!=null) return new java.io.FileInputStream(f);
return null;
}catch(Exception e){throw new RuntimeException(e);}

}
}

  使用舉例:利用上述的方法,可在ConnectionPool中自動查找和ConnectionPool處于同一個包目錄中的database.properties的輸入流,并利用該輸入流讀入對應的屬性值的代碼如下:

public class ConnectionPool{
//靜態初始化器,將在ConnectionPools加載時自動執行
static{
java.util.Properties dbProp=new java.util.Properties();
java.io.InputStream in=PropHelper.guessPropFile(edu.ec.database.ConnectionPool.class,"database.properties");
if(in!=null) dbProp.load(in);
//利用dbProp,為相應的數據源對象設置相關的屬性,比如C3P0........
}
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美成人一区二区在线电影| 国产区精品视频| 亚洲成人久久久久| 亚洲综合中文字幕在线| 国产精品九九久久久久久久| 日本欧美在线视频| 欧美黄色免费网站| 日韩av在线播放资源| 久久青草精品视频免费观看| 欧美成人一区二区三区电影| 国产mv久久久| 青青久久av北条麻妃海外网| 精品毛片三在线观看| 一区二区中文字幕| 久久久国产在线视频| 久久亚洲国产精品| 久久国产一区二区三区| 久久这里有精品| 久久6免费高清热精品| 久青草国产97香蕉在线视频| 国产精品永久免费在线| 九九热这里只有精品免费看| 成人黄色免费在线观看| 亚洲精品在线不卡| 日韩视频永久免费观看| 91高清视频在线免费观看| 97精品视频在线播放| 亚洲乱码av中文一区二区| 国产日韩欧美中文| 亚洲福利在线视频| 有码中文亚洲精品| 久久99精品视频一区97| 色无极亚洲影院| 欧美激情视频在线| 一区二区欧美亚洲| 在线午夜精品自拍| 午夜精品福利电影| 欧美大片欧美激情性色a∨久久| 九九精品视频在线| 成人欧美一区二区三区黑人孕妇| 精品一区精品二区| 91青草视频久久| 久久久之久亚州精品露出| 亚洲国产成人精品电影| 色777狠狠综合秋免鲁丝| 91成人精品网站| 亚洲最大的免费| 精品久久久久久中文字幕一区奶水| 欧美极品第一页| 中文字幕无线精品亚洲乱码一区| 成人信息集中地欧美| 成人欧美一区二区三区黑人| 91久久在线观看| 色先锋资源久久综合5566| 欧美黑人xxxⅹ高潮交| 国产婷婷成人久久av免费高清| 日韩中文字幕精品视频| 国产精品永久在线| 狠狠综合久久av一区二区小说| 欧美亚洲激情在线| 日韩美女在线播放| 亚洲香蕉av在线一区二区三区| 亚洲男女性事视频| 久久精品男人天堂| 国产精品久久久久久久久| 一区二区在线视频播放| 91久久久久久久| 欧美黑人xxx| 日本欧美一级片| 日韩精品亚洲元码| 亚洲欧美另类中文字幕| 欧美成人一区二区三区电影| 国产精品视频久久| 中文字幕日韩av| 欧美精品在线免费播放| 欧美在线免费视频| 中文字幕国产亚洲| 久久人人看视频| 疯狂蹂躏欧美一区二区精品| 日韩高清av一区二区三区| 国产视频丨精品|在线观看| 国产亚洲精品久久久久久| 91牛牛免费视频| 国产999在线观看| 亚洲一区二区久久久久久久| 国产精品av网站| 亚洲人成网站免费播放| 日韩中文理论片| 两个人的视频www国产精品| 国产精品18久久久久久麻辣| 国产精品国产三级国产aⅴ浪潮| 日韩一中文字幕| 色青青草原桃花久久综合| 欧美裸体xxxx极品少妇软件| 欧美黑人狂野猛交老妇| 亚洲综合在线播放| 美女av一区二区| 亚洲在线视频福利| 国产精品男女猛烈高潮激情| 日韩av在线免费观看| 欧美日韩国产综合新一区| 超碰91人人草人人干| 色老头一区二区三区在线观看| 欧美做受高潮电影o| 国产成人jvid在线播放| 国产色婷婷国产综合在线理论片a| 日韩av电影免费观看高清| 91在线免费视频| 欧美亚洲国产视频小说| 国产成人久久精品| 欧美日韩国产成人高清视频| 福利一区视频在线观看| 亚洲人午夜色婷婷| 国产成人aa精品一区在线播放| 在线播放精品一区二区三区| 亚洲春色另类小说| 国产成人亚洲精品| 日韩国产高清视频在线| 亚洲精品少妇网址| 久久久欧美精品| 久久在线免费视频| 久久久久久一区二区三区| 成人网在线免费观看| 欧美日韩第一页| 久色乳综合思思在线视频| 成人免费大片黄在线播放| 57pao国产成人免费| 久久精品国产v日韩v亚洲| 国产精品高潮在线| 亚洲国产日韩欧美在线99| 欧洲精品久久久| 日韩精品极品在线观看播放免费视频| 欧美理论电影在线播放| 欧美国产日本在线| 亚洲人成网站色ww在线| 国产精品第七十二页| 国产精品视频色| 亚洲欧美日韩精品| 亚洲午夜av电影| 欧美日韩亚洲国产一区| 韩国精品美女www爽爽爽视频| 中文字幕亚洲无线码在线一区| 欧美日韩国产在线播放| 自拍偷拍亚洲区| 久热精品视频在线免费观看| 欧美性精品220| 久久久99久久精品女同性| 久久久伊人欧美| 在线成人激情黄色| 欧美精品videos性欧美| 亚洲欧美综合区自拍另类| 在线观看日韩欧美| 亚洲欧美中文字幕| 欧美日韩国产精品一区二区三区四区| 欧美性极品少妇精品网站| 午夜精品www| 国产精品视频一| 亚洲人成自拍网站| 国产精品av在线| 欧美极品欧美精品欧美视频| 亚洲国内精品视频| 色偷偷91综合久久噜噜| 这里只有精品在线播放| 青青久久av北条麻妃黑人|