Java資源的定位方式

Creative Commons License
本作品採用知識共享署名-非商業性使用-相同方式共享 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類的定義如下:

  

如果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類的定義做如下修改:

如果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

 

 

發佈了27 篇原創文章 · 獲贊 15 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章