打jar包之后讀不到properties文件


(1)在Spring項目中有專門讀取properties文件的類

代碼如下:

import org.springframework.core.io.support.PropertiesLoaderUtils;

Properties ret = PropertiesLoaderUtils.loadProperties(new ClassPathResource("XXX.properties")); rs = ret.getProperty("proname");

(2)在普通項目中讀取properties文件

Properties properties = new Properties();
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties"); 

  properties.load(in);

  String str = properties.getProperty("name");

 

https://blog.csdn.net/weixin_44474427/article/details/88365330

遇到的問題是項目打成jar包后無法讀取到jar包內的properties文件

發現在eclipse里一切正常,但打成jar包后就無法讀取到properties文件了。
之前的程序是這樣獲取配置文件的:

Thread.currentThread().getContextClassLoader().getResource("").getPath() +filename+".properties")

來獲取properties文件,但發現一運行就報錯.后來將代碼改成:

this.getClass().getClassLoader().getResourceAsStream(filename+".properties")

一切正常~


關於java 的 classloader 還是有點概念不清,需要補補~~

一般在項目中使用properties配置文件的時候都將相關的properties文件放在src目錄下,在將該app打包生成jar后,相應的properties配置文件生成在jar包中,這樣的話要修改配置文件又要重新打jar包,那是相當的麻煩。。
你肯定想將配置文件放在其他的目錄下例如下面的conf文件,生成的jar包內不包含相應的配置文件,修改配置文件無需重新打包,沒錯,下面就是一種解決方案了。
讀取jar包內配置文件:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("/configfilename.properties");

讀取jar包外配置文件:

String filePath = System.getProperty("user.dir") + "/conf/configfilename.properties";

InputStream in = new BufferedInputStream(new FileInputStream(filePath));

總結:

1. System.getProperty("user.dir") 獲得項目的絕對路徑,然后拼裝配置文件的路徑。


原文鏈接:https://blog.csdn.net/daoshud1/java/article/details/77646074

關於打包

https://www.cnblogs.com/wqbin/p/11128581.html

項目右鍵→Export(JAR file/Runnable JAR file)

(1)直接運行 .class的方法  

     java  -cp .  com.guangfa.demo1  

   不用加.class后綴 java -cp 和 -classpath 一樣,是指定類運行所依賴其他類的路徑,通常是類庫和jar包,需要全路徑到jar包,多個jar包之間連接符:window上分號“;”.Linux下使用“:”。

    https://www.cnblogs.com/klb561/p/10513575.html

(2)從eclipse中export 的jar file,僅僅是把.class打包了。

  執行這種jar file需要用 java -cp .;demo1.jar com.guangfa.demo1

  如果還應用到另外的lib庫,必須在cp里說明,也就是  java -cp .;demo1.jar;lib01.jar;lib02.jar com.guangfa.demo1 來執行。demo1.jar也在cp里面,demo1.jar就是lib庫,最后的參數指明了要被執行的類名。

(3)如果從eclipse里export出的是 runnable jar file,

那么個執行這個jar包的時候是不需要指明哪個類的,直接這樣執行 java -jar demo1.jar。

原因就是jar包中的MANIFEST.MF內容不同。 runnable jar包中指明哪個類先執行,所以你可以用 java -jar demo1.jar來執行你想要執行的代碼,而不必指明具體哪個類。這個你可以打開 jar包查看MANIFEST.MF的區別

 

生成runnable jar file時,有兩個選項,Extract required libraries into generated JAR 和 package equired libraries into generated JAR。

前者是把用到的.class 文件提取出來,后者則是把所需要的所有jar包都打進一個包里。兩者的MANIFEST.MF文件內容也有所不同,這應該是eclipse造成的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM