在jar包在讀取配置是找不到文件

打包好的jar包在讀取配置文件時找不到文件的問題,結果試了很多方法。有些方法在IDE環境下可以正常讀取配置文件,但是打包後將jar包放在服務器上就會出現找不到配置文件的異常。有時打開jar還會發現配置文件沒有在jar裏,所以問題應該是兩個問題,一個是配置文件沒有加載到jar裏。二是真的找不到配置文件

讀取jar包中的資源用下面的方式:

InputStream is=this.getClass().getResourceAsStream("/resource/res.txt");  
BufferedReader br=new BufferedReader(new InputStreamReader(is)); 

其中/resource/res.txt是jar包中的資源文件。
this.getClass()是jar包中的某一個類

    1. 配置文件沒有加載到jar裏
    將java工程打包成可執行的jar時,根目錄下的配置文件都不會裝載到jar裏。但是可以裝在根目錄下某個文件夾裏的properties文件。所以可以在項目根目錄下新建一個config的文件,裏面放置項目需要的一系列配置文件
    2. 讀取配置文件
    讀取配置文件的方法有很多,常見的如下:
    1)我們加載log4j.properties一般使用的是PropertyConfigurator.configure("log4j.properties");,如果我們打開configure方法就會發現,裏面使用的是FileInputStream類來加載log4j.properties,而此時log4j.properties是放在項目根目錄下。
    2)也可以使用ResourceBundle bundle = ResourceBundle.getBundle("config/resconfig");,使用這種方式會遇到中文問題。當配置文件中有中文或者中文符號時,讀取出來的數據就會出現亂碼,因爲ResourceBundle在讀取properties文件時統一使用iso8859-1編碼。解決辦法一是在使用keyValue時,進行編碼轉換,String value = new String(bundle.getString(key).getBytes("ISO-8859-1"), "XXX"); 二是,將*.properties轉換成爲unicode形式,但是我們一般創建配置文件都是使用UTF-8格式編碼成都網站推廣
    3)使用流的方式讀取,就想log4j封裝的方法一樣,但是要保證配置文件放在根目錄下的某個文件夾下
    Properties prop=new Properties();

    prop.load(new InputStreamReader(ChiqEPGTask.class.getClassLoader().getResourceAsStream("config/channel.properties"), "UTF-8"));

    java 程序打包爲jar發佈後,讀取配置文件路徑出錯 ,怎樣獲取配置文件路徑?
    把配置文件ccc.xml放到編譯路徑,如src/com.aaa.aa下面,然後再根據
    String rootPath=Xxxx.class.getResource("/").getPath();
    獲取到編譯的根路徑,配置文件的地址就是rootPath+"com/aaa/aa/ccc.xml"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章