摘要:,到現(xiàn)在為止一切都按部就班,執(zhí)行上面的命令正常運(yùn)行,讀取里面的文件,并輸出相應(yīng)的屬性。那么,如果我們想改變配置文件的內(nèi)容是否需要修改源文件里的然后重新打包成呢顯然這樣做太麻煩也不太合理,你可以在外面配置一個新的讓里的去讀取。
Java中經(jīng)常要用到各種配置文件xxx.properties來控制程序的運(yùn)行或進(jìn)行國際化等
但是也常常遇到配置文件放置路徑找不到的問題,這里以java.uitl.ResourceBundle為例,
小結(jié)一下:
1.Classloader搜索的路徑是classpath指定的
2.搜索文件時走的路徑順序是按照各目錄或jar文件在classpath中的出現(xiàn)位置順序來的
3.配置文件相對路徑的參考root就是classpath中指定的目錄或jar文件包起點(diǎn)
例如:位于package cn.flipme.util中的Resource要讀取cache目錄里的config.properties
我們可以這樣寫:
package cn.flipme.util; import java.util.ResourceBundle; public class Resource { public static void main( String[] args ) { ResourceBundle rb=ResourceBundle.getBundle("cache.config"); System.out.println(rb.getString("name")); } }
這時我們把cache目錄放在src目錄下面,或者用Maven的話在src/main/resources目錄下面,
不管怎么樣編譯后都會移到classes目錄下, 執(zhí)行就能順利獲取到config文件:
classes-| -cache-| -config.properties -cn-| -flipme-| -util-| -Resource.class
現(xiàn)在我們把這個工程打包成jar,假設(shè)叫resource.jar,存放在dist目錄下,
可以通過在cmd里cd到 dist目錄下并輸入以下命令來執(zhí)行包里的Resource.class
java -cp resource.jar cn.flipme.util.Resource
注意類Resource前面必須寫上完整的包路徑。
Ok,到現(xiàn)在為止一切都按部就班,執(zhí)行上面的命令 Resource正常運(yùn)行,讀取resource.jar里面的cache/config.properties文件,并輸出相應(yīng)的name屬性。
那么,如果我們想改變配置文件的內(nèi)容是否需要修改源文件里的config.properties然后重新打包成jar呢?
顯然這樣做太麻煩也不太合理,你可以在jar外面配置一個新的config.properties讓jar里的Resource去讀取。
問題來了,新的config應(yīng)該放在哪里呢?
答案是隨便,你愛放哪里都可以,只要保證它呆在某個目錄的cache/目錄下,并且在-cp里指定放到地方。
最簡單的就是放在dist目錄里,也就是和.jar同級的目錄,dist/cache/config.properties
執(zhí)行:java -cp .;resource.jar cn.flipme.util.Resource
這次讀取的就是新的config,而不是jar里面的config
請注意到以上命令中的.;這非常重要,因?yàn)樗嬖Vjava從當(dāng)前目錄里找文件
還有一點(diǎn)非常重要,那就是.;出現(xiàn)的位置是在resource.jar前面,所以順序優(yōu)先了,
當(dāng)java從.目錄也就是當(dāng)前目錄里找到了cache/config.properties就停止搜索了。
為了驗(yàn)證順序的重要性,你不妨試試:
執(zhí)行:java -cp resource.jar;. cn.flipme.util.Resource
你會發(fā)現(xiàn) ;. 放到resource.jar后面時讀取的config就是jar包里的那個config
好了,搞清楚以上兩點(diǎn)之后,可以再試試在別的地方放置config文件,比如D: estcacheconfig.properties
執(zhí)行:java -cp D: est;resource.jar cn.flipme.util.Resource
同樣的讀取到的就是D盤里剛剛配置的新config。
就到這里吧,發(fā)現(xiàn)自己太唐僧了
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64486.html
摘要:所以,在讀的核心技術(shù)的過程中,我記錄下這些所謂的易忽略的問題,這些問題將會持續(xù)更新在我的這個的博客下,也算是激勵自己重新挖掘這些基礎(chǔ)問題的內(nèi)涵。類路徑只是讓能夠通過配置好的全路徑名找到所需的外部類。 開篇Java是一門不那么簡單也不那么復(fù)雜的語言,Java里面有很多問題和特性是容易被使用者忽視的,這些問題也許會難住新手,同時也許會是老手不小心跌入的無故之坑,只有精于對基礎(chǔ)的提煉才能最大...
摘要:學(xué)習(xí)筆記使用很容易創(chuàng)建一個獨(dú)立運(yùn)行運(yùn)行內(nèi)嵌容器準(zhǔn)生產(chǎn)級別的基于框架的項(xiàng)目,使用你可以不用或者只需要很少的配置。異常消息如果這個錯誤是由異常引起的。錯誤發(fā)生時請求的路徑。 Spring-Boot 1.5 學(xué)習(xí)筆記 使用Spring Boot很容易創(chuàng)建一個獨(dú)立運(yùn)行(運(yùn)行jar,內(nèi)嵌Servlet容器)、準(zhǔn)生產(chǎn)級別的基于Spring框架的項(xiàng)目,使用Spring Boot你可以不用或者只需要很...
摘要:原配置代碼原代碼詳解代表了我們的路徑是關(guān)于運(yùn)行環(huán)境的類庫,主要是用于的包,如果不使用可以不配置。參見擴(kuò)展機(jī)制如果您從的早期版本升級,那么您的啟動設(shè)置可能包括不再需要的類路徑設(shè)置。 showImg(https://segmentfault.com/img/remote/1460000019275936?w=600&h=242); 前言: 之前發(fā)布了關(guān)于java開發(fā)環(huán)境配置的文章,經(jīng)過與網(wǎng)...
PATH和CLASSPATH 本節(jié)介紹如何在Microsoft Windows,Solaris和Linux上使用PATH和CLASSPATH環(huán)境變量,有關(guān)最新信息,請參閱安裝Java Development Kit(JDK)軟件包中隨附的安裝說明。 安裝軟件后,JDK目錄將具有如下所示的結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbqpb7?w=282&h...
摘要:另外,指定多個類路徑也是可以的。系列使用的的分隔符是系列使用的分隔符是。類文件指定需要執(zhí)行的文件。在已經(jīng)制定設(shè)置的環(huán)境下,環(huán)境變量的設(shè)置將會無效優(yōu)先級的問題。當(dāng)前目錄將會無效。是的核心類,里包含與國際化有關(guān)的類。 源自Javaの道日語技術(shù)社區(qū)原文地址譯者夢夢的幻想鄉(xiāng)見てくれてありがとうござい?。?! クラスパス(譯) classpath 這一章將會講解classpath的概要和設(shè)定方法。...
閱讀 3977·2021-11-18 13:22
閱讀 1813·2021-11-17 09:33
閱讀 2877·2021-09-26 09:46
閱讀 1209·2021-08-21 14:11
閱讀 2884·2019-08-30 15:53
閱讀 2707·2019-08-30 15:52
閱讀 1885·2019-08-30 10:52
閱讀 1517·2019-08-29 15:30