Java資源的定位方式

來源:互聯網
上載者:User


本作品採用知識共用署名-非商業性使用-相同方式共用 2.5 中國大陸許可協議進行許可。

 

 

I/O操作在Java中是必須掌握的技術,其中檔案的定位問題就極容易引起思維上的混亂。如下例:

File f1 = new File("/test.txt");
File f2 = new File("test.txt");

我們將“/”開頭的路徑稱為絕對路徑,將非“/”開頭的路徑稱為相對路徑。那麼上面的絕對路徑及相對路徑又分別定位到哪一個檔案上了呢?

 

要想掌握檔案的定位問題,須瞭解以下幾個概念:
1. 檔案系統的根目錄
在Windows下,每一個分區的根目錄(如C:/ D:/ E:/)都是我們所說的檔案系統的根目錄;在UNIX下,"/"就是檔案系統的根目錄。
2. 程式啟動並執行工作目錄
一個帶有靜態main函數的Java類,需要使用java命令才能夠執行,我們將執行java命令時所處的目錄稱為工作目錄。
3. 類路徑(classpath)
類路徑指的是Java類所在包的根目錄。
4. 包路徑
通常Java類都有自己的包,在檔案系統中,Java類的包以目錄的方式表現。一個Java類所在的目錄稱為這個類的包路徑。

 

假如,一個cn.net.uglyduck.test.Test類(類名:Test,包名:cn.net.uglyduck.test)的類路徑
    C:/project/bin
則Test類的包路徑則為
    C:/project/bin/cn/net/uglyduck/test
如果我們的工作目錄類路徑相同,則執行Java程式時,不用指定classpath。如:
    C:/project/bin>java  cn.net.uglyduck.test.Test
如果工作目錄類路徑不同,則執行Java程式時需要指定classpath。如:
    C:/project>java  -cp  C:/project/bin  cn.net.uglyduck.test.Test

 

在Java中定位資源檔的常用方式有兩種:檔案系統定位方式與類路徑定位方式。
所謂檔案系統定位就是以檔案系統的根目錄為絕對路徑,以程式啟動並執行工作目錄為相對路徑進行資源定位。Java中最常用的以檔案系統定位方式進行處理的類包括File、FileInputStream和FileOutputStream。

 

例如Test類的定義如下:

import java.io.File;</p><p>public class Test {</p><p> public static void main(String[] args) {</p><p> File f1 = new File("/test1.txt");<br /> File f2 = new File("test2.txt");</p><p> System.out.println("/test1.txt --> " + f1.getAbsolutePath());<br /> System.out.println("test2.txt --> " + f2.getAbsolutePath());<br /> }<br />}  

如果Test類的類路徑為C:/project/bin,我們在C:/project下執行程式,命令列如下:

C:/project>java  -cp  C:/project/bin  cn.net.uglyduck.test.Test

得到的結果是:

/test1.txt --> C:/test1.txt
test2.txt  --> C:/project/test2.txt

所謂類路徑定位就是以類路徑為絕對路徑,以包路徑為相對路徑進行資源定位。Java類的靜態方法getResource或getResourceAsStream就是以類路徑的方式進行資源定位。

 

例如Test類的定義做如下修改:

package cn.net.uglyduck.test; </p><p>import java.net.URL; </p><p>public class Test {</p><p> public static void main(String[] args) {</p><p> URL url1 = Test.class.getResource("/test1.txt");<br /> URL url2 = Test.class.getResource("test2.txt");</p><p> System.out.println("/test1.txt --> " + url1);<br /> System.out.println("test2.txt --> " + url2);<br /> }<br />}

如果Test類的類路徑為C:/project/bin,我們在C:/project下執行程式,命令列如下:

C:/project>java  -cp  C:/project/bin  cn.net.uglyduck.test.Test

得到的結果是:

/test1.txt --> file:/C:/project/bin/test1.txt
test2.txt  --> file:/C:/project/bin/cn/net/uglyduck/test/test2.txt

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.