(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造成的
