最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件

 更新時(shí)間:2024年01月26日 11:48:14   作者:昨日余光  
這篇文章主要給大家介紹了關(guān)于Java如何獲取Jar、War包路徑并生成可編輯修改的本地配置文件,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

本地的可修改配置文件的編寫理應(yīng)是一個(gè)很常用的功能,但由于數(shù)據(jù)庫的存在,它鮮少被提及,大多數(shù)我們直接存儲(chǔ)到數(shù)據(jù)庫中了。

以至于現(xiàn)今,除了沒接觸數(shù)據(jù)庫的新手時(shí)常使用它以外,它沒有太多的出場(chǎng)機(jī)會(huì)。
也因此,其實(shí)很多人不太了解其中的存儲(chǔ)機(jī)制以及可能存在的一些坑。

不過也有適合用本地配置的時(shí)候,例如我遇到了一個(gè)場(chǎng)景,需要保存一個(gè)郵箱格式,這個(gè)格式當(dāng)然不會(huì)經(jīng)常變化,因而存儲(chǔ)到數(shù)據(jù)庫不太方便,尤其我用的是關(guān)系型數(shù)據(jù)庫MYSQL,存起來感覺很別扭。如果存到Redis中,一旦服務(wù)宕機(jī),數(shù)據(jù)就會(huì)消失,雖然并不是很重要的數(shù)據(jù),但也不是很好的解決方案。

分析

要了解如何生成一個(gè)本地的可編輯配置文件,首先就得想清楚文件應(yīng)該放在哪?

新手可能會(huì)直接回答,這還不簡(jiǎn)單,直接跟代碼一樣放classes目錄下不就得了。

答案顯然是不行的,因?yàn)閖ar包本質(zhì)上是一個(gè)壓縮包,如果你放在IDE中直接運(yùn)行,那么不會(huì)有任何問題,但是一旦你需要打jar包或者war包。你就無法動(dòng)態(tài)的去修改Jar包中的內(nèi)容,這點(diǎn)很容易理解。

所以,比較科學(xué)的方法,就是在Jar/War包的同級(jí)目錄下,新建一個(gè)配置文件。

1.獲取Jar包同級(jí)目錄

方法一、Protection Domain

如何獲取Jar包的同級(jí)目錄,可以使用jdk提供的Protection Domain

以下代碼可以得到當(dāng)前代碼源的位置,簡(jiǎn)單來說,就是編譯生成的classes目錄。

File file=new File file=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());

但是要得到想要的Jar包路徑還沒有那么簡(jiǎn)單,因?yàn)檫@里有一個(gè)坑,在IDE中直接運(yùn)行和打成Jar包后運(yùn)行的效果是不同的。

例如以下的這段演示代碼:

String name = new String("history.json");
File file=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
System.out.println(file.toString());
String jarPath = file.getParentFile().getParent();//jar所在文件夾路徑
System.out.println("jarPath: " + jarPath);
String resource = jarPath + File.separator +name;
System.out.println(resource);

(1)IDE中

(2)windows下運(yùn)行Jar

(3)Linux下運(yùn)行Jar

方法一路徑問題總結(jié)

由此,我們得出一個(gè)結(jié)論,上述獲取jar包路徑的代碼,在IDE中運(yùn)行的效果和打包后運(yùn)行效果不同,且打包后Windows和Linux運(yùn)行效果基本一致。

我們想要的Jar文件夾路徑,需要向上獲取三次父目錄,正確的在打包后獲取Jar包路徑的代碼應(yīng)該如下:
resource即我們需要的配置文件路徑,使用File.seperator是為了不同平臺(tái)的適配性。

String name = new String("history.json");
File file=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
File jarPath = file.getParentFile().getParentFile().getParentFile();//jar所在文件夾路徑
String resource = jarPath.getPath().replace("file:","") + File.separator +name;

方法二(推薦)

Java的系統(tǒng)變量里給我們提供了很多方便的配置,例如user.dir可以直接獲取到當(dāng)前的工作目錄,而且通過這種方式不管是在IDE還是部署時(shí),得到的結(jié)果都是一致的,不會(huì)出現(xiàn)不同層級(jí)的情況。

//get the config file path
String jarPath = System.getProperty("user.dir");
String resourcePath = jarPath + File.separator + appConfig.getFileName();

2.讀取與修改配置文件

有了對(duì)應(yīng)的配置文件路徑,那么就很輕松了。

考慮到配置文件一般是Properties或Yaml格式,這里以Java本身支持的Properties為例。

使用字符流讀取較為方便,因其可以自動(dòng)處理編碼問題。

例如:

 //使用properties
        Reader reader =new FileReader(config);
        Properties properties = new Properties();
        properties.load(reader);

        System.out.println(properties.getProperty("last-update"));

總結(jié)

Java獲取Jar、war包路徑的可行方法是通過Protection Domain,在使用時(shí)要注意不同平臺(tái)的微小差異,掌握了這個(gè)方法,不但可以用來寫配置文件,也可以用來存儲(chǔ)下載的圖片、視頻等內(nèi)容,因而尤其對(duì)客戶端應(yīng)用的開發(fā)人員來說,十分有必要去了解。

到此這篇關(guān)于Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件的文章就介紹到這了,更多相關(guān)Java獲取Jar War包路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)棧和最小棧的方法

    Java實(shí)現(xiàn)棧和最小棧的方法

    棧(Stack)是一種常用的數(shù)據(jù)結(jié)構(gòu),其核心特點(diǎn)是先進(jìn)后出,這篇文章主要介紹了Java實(shí)現(xiàn)棧和最小棧的相關(guān)操作,需要的朋友可以參考下
    2026-02-02
  • 詳解如何使用Mybatis的攔截器

    詳解如何使用Mybatis的攔截器

    MyBatis?攔截器是?MyBatis?提供的一個(gè)強(qiáng)大特性,它允許你在?MyBatis?執(zhí)行其核心邏輯的關(guān)鍵節(jié)點(diǎn)插入自定義邏輯,從而改變?MyBatis?的默認(rèn)行為,本文給大家詳細(xì)介紹了如何使用Mybatis的攔截器,需要的朋友可以參考下
    2024-03-03
  • Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼生成(后端工具類)

    Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼生成(后端工具類)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼生成功能中的后端工具類部分,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-10-10
  • java實(shí)現(xiàn)獲取用戶的MAC地址

    java實(shí)現(xiàn)獲取用戶的MAC地址

    本文給大家匯總介紹了下使用java實(shí)現(xiàn)獲取客戶端用戶的MAC地址的方法,當(dāng)然最后一種更全面一些,有需要的小伙伴們可以根據(jù)需求自由選擇。
    2015-10-10
  • Java實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼生成

    Java實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼生成

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 使用Feign實(shí)現(xiàn)微服務(wù)間文件下載

    使用Feign實(shí)現(xiàn)微服務(wù)間文件下載

    這篇文章主要為大家詳細(xì)介紹了使用Feign實(shí)現(xiàn)微服務(wù)間文件下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Maven的聚合(多模塊)和Parent繼承

    Maven的聚合(多模塊)和Parent繼承

    今天小編就為大家分享一篇關(guān)于Maven的聚合(多模塊)和Parent繼承,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用

    Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用

    這篇文章主要介紹了Java中過濾器 (Filter) 和 攔截器 (Interceptor)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Spring實(shí)戰(zhàn)之使用ClassPathResource加載xml資源示例

    Spring實(shí)戰(zhàn)之使用ClassPathResource加載xml資源示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之使用ClassPathResource加載xml資源,結(jié)合實(shí)例形式分析了Spring使用ClassPathResource加載xml資源的具體實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • SpringBoot整合ZXing實(shí)現(xiàn)二維碼和條形碼的創(chuàng)建

    SpringBoot整合ZXing實(shí)現(xiàn)二維碼和條形碼的創(chuàng)建

    如今我們?cè)絹碓蕉嗟臇|西需要用到二維碼或者條形碼,商品的條形碼,付款的二維碼等等,所以本文小編給大家介紹了SpringBoot整合ZXing實(shí)現(xiàn)二維碼和條形碼的創(chuàng)建,文章通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評(píng)論

德令哈市| 临朐县| 宜君县| 淮北市| 涟源市| 淮北市| 通渭县| 新乡县| 长寿区| 元朗区| 莆田市| 沅陵县| 江陵县| 惠来县| 宜良县| 中超| 东安县| 遂溪县| 石阡县| 临夏县| 股票| 宜丰县| 达拉特旗| 太谷县| 墨竹工卡县| 通江县| 武鸣县| 饶阳县| 西畴县| 大港区| 永川市| 伊春市| 新龙县| 建平县| 兴业县| 海盐县| 庆城县| 乳山市| 平塘县| 瓮安县| 泰和县|