成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Java中的路徑問(wèn)題實(shí)例分析

EasonTyler / 744人閱讀

摘要:中的路徑問(wèn)題實(shí)例分析前言關(guān)于中得路徑問(wèn)題,網(wǎng)上有很多獲取的答案,我這篇文章的目的在于說(shuō)明獲取路徑時(shí)一些不常見(jiàn)的概念。在實(shí)際應(yīng)用中使用的比較多的就是,當(dāng)前路徑和配置文件的路徑其他文件的路徑。大氣層的高度是千米高等等。

Java中的路徑問(wèn)題實(shí)例分析

前言:關(guān)于Java中得路徑問(wèn)題,網(wǎng)上有很多獲取的答案,我這篇文章的目的在于說(shuō)明獲取路徑時(shí)一些不常見(jiàn)的概念。在實(shí)際應(yīng)用中使用的比較多的就是,當(dāng)前路徑和配置文件的路徑(其他文件的路徑)。為了搞清楚路徑的問(wèn)題我們不得不高清吃另一個(gè)問(wèn)題, 那就是上下文Context, 我們可能聽(tīng)過(guò)很多關(guān)于上下文的問(wèn)題, 比如說(shuō)sevletContext,applicationContext,httpContext,, springContext上下文很多,那么究竟什么是上下文呢?

java中的上下文

Java中的上下文我們用到的地方非常多,比如說(shuō)獲取路徑,資源定位,web項(xiàng)目啟動(dòng)。但是我們只是知道有這么一個(gè)東西充滿了神秘感,而不知道它是什么。其實(shí)Context是一個(gè)抽象的概念,而不是確實(shí)存在的東西, 不像對(duì)象一樣是一個(gè)實(shí)質(zhì)的概念,我們可以這樣理解,他就是一個(gè)環(huán)境,舉個(gè)例子:在web項(xiàng)目中,我們將項(xiàng)目部署到了tomcat服務(wù)器中,而tomcat服務(wù)器同時(shí)也是一個(gè)容器,當(dāng)我們想獲取容器里面的東西的時(shí)候,卻獲取不到,這時(shí)候Context就出現(xiàn)了, 它的上層就是容器本身,同時(shí)它包含了容器創(chuàng)建的和我們創(chuàng)建的所有東西,我們可以通過(guò)Context獲取我們想要的東西:例如資源位置。可以這樣想我們下了一個(gè)定義叫地球邊界,我們?nèi)藶榈囊?guī)定了它,它包含著整個(gè)地球里所有的東西,但是它卻并不是真實(shí)存在的,我們卻這樣去用它們來(lái)獲取一些東西,比如喜馬拉雅山海拔8848米。大氣層的高度是65000千米高等等。

這個(gè)上下文好似一雙無(wú)形的手,把所有的對(duì)象,組件囊括其中。

當(dāng)前路徑 ClassLoader

在獲取當(dāng)前路徑前我們還必須要搞懂一樣?xùn)|西就是類(lèi)加載器,java的類(lèi)加載機(jī)制(jvm規(guī)范)是委托模型,簡(jiǎn)單的說(shuō),如果一個(gè)類(lèi)加載器想要加載一個(gè)類(lèi),首先它會(huì)委托給它的parent去加載,如果它的所有parent都沒(méi)有成功的加載那么它才會(huì)自己親自來(lái)。所以當(dāng)我們使用到類(lèi)加載器的時(shí)候就獲取一定是該類(lèi)的執(zhí)行路徑,也就是編譯后路徑,也就是 .class文件的路徑。

通過(guò)getResource()來(lái)獲取路徑。

public java.net.URL getResource(String name) {

   name = resolveName(name);
   ClassLoader cl = getClassLoader0();
   if (cl==null) {
       // A system class.
       return ClassLoader.getSystemResource(name);
   }
   return cl.getResource(name);

}

在這里源碼中寫(xiě)道 return ClassLoader.getSystemResource(name);它自動(dòng)調(diào)用了類(lèi)加載器的方法。所以也會(huì)是一個(gè)編譯后路徑,而我們?cè)趙eb項(xiàng)目中也是將項(xiàng)目編譯后放入tomcat中得,所以當(dāng)項(xiàng)目運(yùn)行時(shí)找這個(gè)路徑也是符合情理的。例如:

    String currentPath1 = PathTest.class.getResource("").getPath();
    System.out.println("當(dāng)前類(lèi)路徑為1:" + currentPath1);
    String currentPath2 = PathTest.class.getClassLoader().getResource("").getPath();
    System.out.println("當(dāng)前類(lèi)路徑為2:" + currentPath2);
    String currentPath3 = Thread.currentThread().getContextClassLoader().getResource("").getPath();
    System.out.println("當(dāng)前類(lèi)路徑為3:" + currentPath3);

它們的結(jié)果是:

當(dāng)前類(lèi)路徑為1:/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/testOthers/
當(dāng)前類(lèi)路徑為2:/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/
當(dāng)前類(lèi)路徑為3:/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/

另外sevlet中可以通過(guò)ServletContext來(lái)獲取路徑:

 String path = ServletContext.class.getClassLoader().getResource("").getPath();
    String path2 = ServletContext.class.getResource("/").getPath();

  System.out.println(path);
  System.out.println(path2);
這是結(jié)果:注意上面的getClassLoader(),一個(gè)有一個(gè)沒(méi)有;
/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/
/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/

注意:上面的結(jié)果還有些不同直接通過(guò)getResource()得到的才是包含包名的類(lèi)路徑。

獲取項(xiàng)目根路徑的方法為:就這直接在getResource("/")這個(gè)方法中加上了根路徑符。

配置文件的路徑

可以通過(guò)這種方式來(lái)獲取配置文件的路徑,加上配置文件的相對(duì)路徑名就好了:

String currentPath3 = Thread.currentThread().getContextClassLoader().getResource("resource/file.txt").getPath();
        System.out.println("當(dāng)前類(lèi)路徑為3:" + currentPath3);

結(jié)果為:

當(dāng)前類(lèi)路徑為3:/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/resource/file.txt

獲取配置文件的路徑名在spring和其他框架中又有其他方式,這里不做過(guò)多說(shuō)明了,網(wǎng)上教程一大堆。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70958.html

相關(guān)文章

  • Java NIO之擁抱Path和Files

    摘要:返回一個(gè)路徑,該路徑是冗余名稱(chēng)元素的消除。本節(jié)教程將覆蓋大部分方法。在本例中,這個(gè)數(shù)組內(nèi)包含了,表示檢測(cè)時(shí)不包含符號(hào)鏈接文件。遍歷整個(gè)文件目錄接受一個(gè)和作為參數(shù)。 Java面試通關(guān)手冊(cè)(Java學(xué)習(xí)指南)github地址(歡迎star和pull):https://github.com/Snailclimb/Java_Guide 歷史回顧: Java NIO 概覽 Java NIO 之 ...

    DevYK 評(píng)論0 收藏0
  • JVM實(shí)戰(zhàn)---類(lèi)加載的過(guò)程

    任何程序都需要加載到內(nèi)存才能與CPU進(jìn)行交流 同理, 字節(jié)碼.class文件同樣需要加載到內(nèi)存中,才可以實(shí)例化類(lèi) ClassLoader的使命就是提前加載.class 類(lèi)文件到內(nèi)存中 在加載類(lèi)時(shí),使用的是Parents Delegation Model(溯源委派加載模型) Java的類(lèi)加載器是一個(gè)運(yùn)行時(shí)核心基礎(chǔ)設(shè)施模塊,主要是在啟動(dòng)之初進(jìn)行類(lèi)的加載、鏈接、初始化 showImg(https://s...

    bladefury 評(píng)論0 收藏0
  • 日文文本分析最強(qiáng)王者——Kuromoji

    摘要:在我認(rèn)識(shí)范圍內(nèi)完成的是在日文文本分析方面的最強(qiáng)王者。簡(jiǎn)介是一個(gè)開(kāi)源的日文詞法分析的庫(kù)。功能你可以用它來(lái)對(duì)日文文本進(jìn)行如下的處理,包括且不僅包括分詞給出讀音包括漢字詞性詞干提取你也可以在的嘗試。關(guān)聯(lián)可以將日文漢字轉(zhuǎn)換成平假名,片假名或的 在我認(rèn)識(shí)范圍內(nèi)atilika完成的Kuromoji是在日文文本分析方面的最強(qiáng)王者。 簡(jiǎn)介 kuromoji是一個(gè)開(kāi)源的日文詞法分析的JAVA庫(kù)。 但也...

    張紅新 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<