java 三種讀取配置文件的方式

個人專題目錄


方式一:

采用ServletContext讀取民晒,讀取配置文件的realpath进栽,然后通過文件流讀取出來说莫。因為是用ServletContext讀取文件路徑镣丑,所以配置文件可以放入在web-info的classes目錄中奢入,也可以在應(yīng)用層級及web-info的目錄中展辞。文件存放位置具體在eclipse工程中的表現(xiàn)是:可以放在src下面,也可放在web-info及webroot下面等划提。因為是讀取出路徑后枫弟,用文件流進行讀取的,所以可以讀取任意的配置文件包括xml和properties鹏往。缺點:不能在servlet外面應(yīng)用讀取配置信息淡诗。

具體舉例如下:

//ServletContext.getRealPath(name)讀取路徑
private void test1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //response.setContentType("text/html;charset=utf-8");
    String path = "/WEB-INF/jdbc_connection.properties";  //讀取WEB-INF中的配置文件
    String realPath = getServletContext().getRealPath(path);//getServletContext()相當(dāng)于http://localhost/demo05
    //所以后面的path只需要以應(yīng)用demo/開頭具體的部署目錄路徑即可,如上面的/web-in…
    System.out.println(realPath);
    InputStreamReader reader = new InputStreamReader(new FileInputStream(realPath), "utf-8");
    Properties props = new Properties();
    props.load(reader); //load個人建議還是用Reader來讀伊履,因為reader體系中有個InputStreamReader可以指定編碼
    String jdbcConValue = props.getProperty("jdbc_con");
    System.out.println(jdbcConValue);
    System.out.println("加載src包下的資源------------------------");
    path = "/WEB-INF/classes/com/test/servlet/jdbc_connection.properties";  //讀取WEB-INF中的配置文件
    realPath = getServletContext().getRealPath(path);
    System.out.println(realPath);
    reader = new InputStreamReader(new FileInputStream(realPath), "utf-8");
    props.load(reader); //load個人建議還是用Reader來讀韩容,因為reader體系中有個InputStreamReader可以指定編碼
    jdbcConValue = props.getProperty("jdbc_con");
    System.out.println("second::" + jdbcConValue);
}

方式二:

采用ResourceBundle類讀取配置信息,此種方式的優(yōu)點是:可以以完全限定類名的方式加載資源后唐瀑,直接的讀取出來群凶,且可以在非Web應(yīng)用中讀取資源文件。缺點:只能加載類classes下面的資源文件且只能讀取.properties文件哄辣。若資源文件的編碼是utf-8等其它的非is0-8859-1的編碼時请梢,需要將讀取出來的value先進行g(shù)etBytes(“iso-8859-1”)編碼得到原文,而用newString(bs[],”utf-8”)進行解碼力穗。

具體舉例如下:

//ResourceBundler讀取資源
private void test2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //讀取src下面包的配置文件毅弧,似乎沒有什么好辦法可以讀取Bundle中是utf-8編碼的資源文件
    ResourceBundle rb = ResourceBundle.getBundle("com.test.servlet.jdbc_connection");
    String jdbcConValue = rb.getString("jdbc_con");
    System.out.println(jdbcConValue);//呵呵,搞定了当窗。資源文件中是utf-8編碼的夹纫,但是ResourceBundler默認是按iso-8859-1解碼的
    byte[] buf = jdbcConValue.getBytes("iso-8859-1");//所以讀取到了峡谊,要用iso-8859-1進行解碼得到原本的byte后患久,再用utf-8進行編碼
    System.out.println(new String(buf, "utf-8")); //這里再用utf-8進行解碼就Ok另萤。.
}

方式三:

采用ClassLoader方式進行讀取配置信息,此種方式的優(yōu)點是:可以在非Web應(yīng)用中讀取配置資源信息嘶朱,可以讀取任意的資源文件信息蛾坯。缺點:只能加載類classes下面的資源文件。

     具體舉例如下:
//ClassLoader讀取資源
private void test3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ClassLoader cl = ServletReadConfig.class.getClassLoader();
    InputStream in = cl.getResourceAsStream("com/test/servlet/jdbc_connection.properties");
    Properties props = new Properties();
    props.load(in); //load個人建議還是用Reader來讀疏遏,因為reader體系中有個InputStreamReader可以指定編碼
    String jdbcConValue = props.getProperty("jdbc_con");
    byte[] resoucreBytes = jdbcConValue.getBytes("iso-8859-1");
    System.out.println(new String(resoucreBytes, "utf-8"));
    System.out.println("----------ClassLoader讀取資源讀取脉课,用Reader來傳遞進Properties---------------");
    InputStream in2 = cl.getResourceAsStream("com/test/servlet/jdbc_connection.properties");
    Reader reader = new InputStreamReader(in2, "utf-8"); //直接用轉(zhuǎn)換流來搞定
    Properties props2 = new Properties();
    props2.load(reader);
    jdbcConValue = props2.getProperty("jdbc_con");
    System.out.println(jdbcConValue);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末救军,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子倘零,更是在濱河造成了極大的恐慌唱遭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呈驶,死亡現(xiàn)場離奇詭異拷泽,居然都是意外死亡,警方通過查閱死者的電腦和手機袖瞻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門司致,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人聋迎,你說我怎么就攤上這事脂矫。” “怎么了霉晕?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵庭再,是天一觀的道長。 經(jīng)常有香客問我牺堰,道長拄轻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任伟葫,我火速辦了婚禮恨搓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筏养。我一直安慰自己奶卓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布撼玄。 她就那樣靜靜地躺著,像睡著了一般墩邀。 火紅的嫁衣襯著肌膚如雪掌猛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天眉睹,我揣著相機與錄音荔茬,去河邊找鬼。 笑死竹海,一個胖子當(dāng)著我的面吹牛慕蔚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斋配,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼孔飒,長吁一口氣:“原來是場噩夢啊……” “哼灌闺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坏瞄,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤桂对,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸠匀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕉斜,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年缀棍,在試婚紗的時候發(fā)現(xiàn)自己被綠了宅此。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡爬范,死狀恐怖父腕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坦敌,我是刑警寧澤侣诵,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站狱窘,受9級特大地震影響杜顺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蘸炸,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一躬络、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搭儒,春花似錦穷当、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铃岔,卻和暖如春汪疮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毁习。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工智嚷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纺且。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓盏道,卻偏偏與公主長得像,于是被迫代替她去往敵國和親载碌。 傳聞我的和親對象是個殘疾皇子猜嘱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架衅枫,建立于...
    Hsinwong閱讀 22,403評論 1 92
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)泉坐,斷路器为鳄,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,815評論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法腕让,內(nèi)部類的語法孤钦,繼承相關(guān)的語法,異常的語法纯丸,線程的語...
    子非魚_t_閱讀 31,632評論 18 399
  • 周一的時候翹課偏形,寫了一天代碼,收獲頗豐觉鼻。周二的時候翹課俊扭,看了一天動漫,收獲頗豐坠陈。 終于有點癡迷于一樣?xùn)|西的感覺了萨惑,...
    餌心閱讀 162評論 0 0