亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

分析

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

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

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

所以,比較科學的方法,就是在Jar/War包的同級目錄下,新建一個配置文件。

1.獲取Jar包同級目錄

方法一、Protection Domain

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

以下代碼可以得到當前代碼源的位置,簡單來說,就是編譯生成的classes目錄。

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

但是要得到想要的Jar包路徑還沒有那么簡單,因為這里有一個坑,在IDE中直接運行和打成Jar包后運行的效果是不同的。

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

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下運行Jar

(3)Linux下運行Jar

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

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

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

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可以直接獲取到當前的工作目錄,而且通過這種方式不管是在IDE還是部署時,得到的結(jié)果都是一致的,不會出現(xiàn)不同層級的情況。

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

2.讀取與修改配置文件

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

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

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

例如:

 //使用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,在使用時要注意不同平臺的微小差異,掌握了這個方法,不但可以用來寫配置文件,也可以用來存儲下載的圖片、視頻等內(nèi)容,因而尤其對客戶端應(yīng)用的開發(fā)人員來說,十分有必要去了解。

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

相關(guān)文章

  • 使用SpringBoot獲取resources文件路徑

    使用SpringBoot獲取resources文件路徑

    這篇文章主要介紹了使用SpringBoot獲取resources文件路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn)

    SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn)

    本文主要介紹了SpringBoot項目從18.18M瘦身到0.18M的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Idea中g(shù)it的使用小結(jié)

    Idea中g(shù)it的使用小結(jié)

    這篇文章主要介紹了Idea中g(shù)it的使用小結(jié),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • IDEA 中創(chuàng)建SpringBoot 父子模塊的實現(xiàn)

    IDEA 中創(chuàng)建SpringBoot 父子模塊的實現(xiàn)

    這篇文章主要介紹了IDEA 中創(chuàng)建SpringBoot 父子模塊的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Spring?boot?運用策略模式實現(xiàn)避免多次使用if

    Spring?boot?運用策略模式實現(xiàn)避免多次使用if

    這篇文章主要介紹了Spring?boot?運用策略模式實現(xiàn)避免多次使用if,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot 如何讀取pom.xml中的值

    SpringBoot 如何讀取pom.xml中的值

    這篇文章主要介紹了SpringBoot 如何讀取pom.xml中的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JAVAEE項目結(jié)構(gòu)以及并發(fā)隨想

    JAVAEE項目結(jié)構(gòu)以及并發(fā)隨想

    每個代碼里面的工具都是工具,API是你最需要理解的,哪個好,哪個不好,沒有準確答案。 一切皆對象,對于Java來講是純粹的,代理是對象,反射是對象,對象是對象,基本數(shù)據(jù)類型不是對象。
    2016-04-04
  • 生產(chǎn)消費者模式實現(xiàn)方式和線程安全問題代碼示例

    生產(chǎn)消費者模式實現(xiàn)方式和線程安全問題代碼示例

    這篇文章主要介紹了生產(chǎn)消費者模式實現(xiàn)方式和線程安全問題代碼示例,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • CentOS7和8中安裝Maven3.8.4的簡單步驟

    CentOS7和8中安裝Maven3.8.4的簡單步驟

    maven是屬于apache的一個工具,主要是對java進行編譯打包,解決依賴關(guān)系,下面這篇文章主要給大家介紹了關(guān)于CentOS7和8中安裝Maven3.8.4的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 使用maven-assembly-plugin如何打包多模塊項目

    使用maven-assembly-plugin如何打包多模塊項目

    這篇文章主要介紹了使用maven-assembly-plugin如何打包多模塊項目,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論