成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

EasonTyler / 801人閱讀

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

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

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

java中的上下文

Java中的上下文我們用到的地方非常多,比如說獲取路徑,資源定位,web項(xiàng)目啟動。但是我們只是知道有這么一個(gè)東西充滿了神秘感,而不知道它是什么。其實(shí)Context是一個(gè)抽象的概念,而不是確實(shí)存在的東西, 不像對象一樣是一個(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)建的所有東西,我們可以通過Context獲取我們想要的東西:例如資源位置。可以這樣想我們下了一個(gè)定義叫地球邊界,我們?nèi)藶榈囊?guī)定了它,它包含著整個(gè)地球里所有的東西,但是它卻并不是真實(shí)存在的,我們卻這樣去用它們來獲取一些東西,比如喜馬拉雅山海拔8848米。大氣層的高度是65000千米高等等。

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

當(dāng)前路徑 ClassLoader

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

通過getResource()來獲取路徑。

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);

}

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

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

它們的結(jié)果是:

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

另外sevlet中可以通過ServletContext來獲取路徑:

 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è)沒有;
/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/
/E:/IdeaWorkspace/path-analysis/out/production/path-analysis/

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

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

配置文件的路徑

可以通過這種方式來獲取配置文件的路徑,加上配置文件的相對路徑名就好了:

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

結(jié)果為:

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

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

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/70958.html

相關(guān)文章

  • Java NIO之擁抱Path和Files

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

    DevYK 評論0 收藏0
  • JVM實(shí)戰(zhàn)---類加載的過程

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

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

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

    張紅新 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<