Java中讀取資源文件小結(jié)

無論是Servlet或者Spring哆致、MyBatis绕德,配置資源文件都是必不可少的一項(xiàng)工作,Java中主要提供了提供了2個(gè)類來讀取資源文件摊阀,一個(gè)是Class類耻蛇,一個(gè)是ClassLoader類。 本文對Java中讀取資源文件做一個(gè)總結(jié)胞此,希望對大家有所幫助臣咖。

本篇中講解以Maven為例,項(xiàng)目結(jié)構(gòu)如下:

1.png

一漱牵、Java API

java.lang.Classjava.lang.ClassLoader 都提供了
InputStream getResourceAsStream(String name);
java.net.URL getResource(String name)
方法來獲取資源文件夺蛇。

二、相對路徑和絕對路徑

** 相對路徑 ** :path中不以'/'開頭表示該路徑是相對路徑酣胀,相對于當(dāng)前類所在的目錄刁赦。
** 絕對路徑 ** :path中以'/'開頭表示該路徑是絕對路徑,相對于classpath的絕對路徑。

三闻镶、讀取resources目錄下的資源文件

1. 讀取resources目錄下的config.properties文件

    String path = "/config.properties";
    InputStream in = PropertiesLoader.class.getResourceAsStream(path);
    Properties props = load(in);
    System.out.println("path: "+ path + ", props: " + props);

或者使用ClassLoader:

    String path = "/config.properties";
    InputStream in = PropertiesLoader.class.getClassLoader().getResourceAsStream(fileName); 
    Properties props = load(in);
    System.out.println("path: "+ path + ", props: " + props);

四甚脉、讀取類package下的資源文件

我們現(xiàn)在想要讀取 com.mindflow.demo.cfg包下的app.properties文件,代碼如下:

        String path = "cfg/app.properties";
    InputStream in = PropertiesLoader.class.getResourceAsStream(path);
    Properties props = load(in);
    System.out.println("path: "+ path + ", props: " + props);

也可以使用絕對路徑:

        String path = "/com/mindflow/demo/cfg/app.properties";
    InputStream in = PropertiesLoader.class.getResourceAsStream(path);
    Properties props = load(in);
    System.out.println("path: "+ path + ", props: " + props);

五铆农、注意事項(xiàng)

因?yàn)镸aven默認(rèn)不會(huì)將src路徑下的資源文件打包到classpath路徑下牺氨,所以需要在pom.xml下增加如下配置:

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>

完整配置如下:

  <build>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <testSource>${java.version}</testSource>
          <testTarget>${java.version}</testTarget>
          <encoding>${project.build.sourceEncoding}</encoding>
        </configuration>
      </plugin>
      <!--source code-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

PropertiesLoader.java 源碼:

package com.mindflow.demo;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * ${DESCRIPTION}
 *
 * @author Ricky Fung
 */
public abstract class PropertiesLoader {

    public static void main( String[] args ) throws IOException {

        //1.讀取resources目錄下文件
        String path = "/config.properties";
        Properties props = PropertiesLoader.readFile(path);
        System.out.println("path: "+ path + ", props: " + props);

        //2. 讀取resources/data
        path = "/data/db.properties";
        props = PropertiesLoader.readFile(path);
        System.out.println("path: "+ path + ", props: " + props);

        System.out.println("=====================================");

        //3.讀取類路徑下(src) 資源文件
        path = "cfg/app.properties";
        props = PropertiesLoader.readFile(path);
        System.out.println("path: "+ path + ", props: " + props);

        //4.使用絕對路徑讀取資源文件
        path = "/com/mindflow/demo/cfg/app.properties";
        props = PropertiesLoader.readFile(path);
        System.out.println("path: "+ path + ", props: " + props);

    }

    public static Properties readFile(String path) throws IOException {
        InputStream in = PropertiesLoader.class.getResourceAsStream(path);
        Properties props = load(in);
        return props;
    }

    public static Properties load(InputStream in) throws IOException {
        Properties props = new Properties();
        props.load(in);
        return props;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子波闹,更是在濱河造成了極大的恐慌酝豪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件精堕,死亡現(xiàn)場離奇詭異孵淘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)歹篓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門瘫证,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庄撮,你說我怎么就攤上這事背捌。” “怎么了洞斯?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵毡庆,是天一觀的道長。 經(jīng)常有香客問我烙如,道長么抗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任亚铁,我火速辦了婚禮蝇刀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徘溢。我一直安慰自己吞琐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布然爆。 她就那樣靜靜地躺著站粟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曾雕。 梳的紋絲不亂的頭發(fā)上奴烙,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音翻默,去河邊找鬼缸沃。 笑死恰起,一個(gè)胖子當(dāng)著我的面吹牛修械,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播检盼,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肯污,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹦渣,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤哄芜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后柬唯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體认臊,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年锄奢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了失晴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拘央,死狀恐怖涂屁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灰伟,我是刑警寧澤拆又,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站栏账,受9級特大地震影響帖族,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜发笔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一盟萨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧了讨,春花似錦捻激、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至男杈,卻和暖如春丈屹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伶棒。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工旺垒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肤无。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓先蒋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宛渐。 傳聞我的和親對象是個(gè)殘疾皇子竞漾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理眯搭,服務(wù)發(fā)現(xiàn),斷路器业岁,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評論 25 707
  • 感賞兒子在我進(jìn)家門的第一時(shí)間遞我一杯水鳞仙,然后說:媽媽辛苦啦! 感賞兒子把自己的碗筷洗的很干凈! 感賞兒子今天跟我談...
    曉莉_f92b閱讀 185評論 1 3
  • 立秋一過棍好,風(fēng)就來了,悄悄地掃過允耿,慢慢地梳玫,從北向南,一點(diǎn)一點(diǎn)地右犹,移動(dòng)提澎。 于是,地里的高粱紅了念链,玉米黃了盼忌,稻谷彎腰了。...
    韓秀琴cn閱讀 576評論 2 8
  • 手捧書卷 看不進(jìn)一個(gè)字 并不是因?yàn)槲姨>?也不是這書太乏味 當(dāng)你的樣子映入眼簾 當(dāng)你的話語來到耳邊 我便難以自持...
    王不煩閱讀 118評論 0 1