1. 程式人生 > >JAVA File的建立及相對路徑絕對路徑

JAVA File的建立及相對路徑絕對路徑

File f = newFile("D:/test/mytest.txt");//當執行這句話後在記憶體的棧空間存在一個f的應用,在堆空間裡存在一個mytest.txt物件。注意

這個物件只含有檔案的屬性(如大小,是否可讀,修改時間等),不包含檔案的內容,所以length=0。當我們想執行對檔案的操作的時候,這個時

候抽象路徑起作用了,比如我們想執行f.createNewFile()命令時,虛擬機器會將抽象路徑轉化為實際的物理路徑,到這個轉化後的物理路徑(此時

是硬碟)下進行檔案的建立。這時,如果在你的D盤沒有test資料夾,那麼不好意思啦,程式就會拋異常,如果有test資料夾,就可以建立一個

mytest.txt檔案了。能不能建立mytest.txt就在於這個檔案上面有沒有test資料夾,這也就是抽象路徑在裝怪了。
如果想讓f引用在硬碟中把資料夾也創建出來怎麼辦?用f.getParentFile()求出mytest.txt上面的所有資料夾,然後在mkdirs()就搞定了。

-----------------------
-----------------------
File類是用來構造檔案或資料夾的類,在其建構函式中要求傳入一個String型別的引數,用於指示檔案所在的路徑.以前一直使用絕對路徑作為參

數,其實這裡也可以使用相對路徑.使用絕對路徑不用說,很容易就能定位到檔案,那麼使用了相對路徑jvm如何定位檔案的呢?

按照jdkDoc上的說法”絕對路徑名是完整的路徑名,不需要任何其他資訊就可以定位自身表示的檔案。相反,相對路徑名必須使用來自其他路

徑名的資訊進行解釋。預設情況下,java.io 包中的類總是根據當前使用者目錄來分析相對路徑名。此目錄由系統屬性 user.dir指定,通常是

Java 虛擬機器的呼叫目錄.”

相對路徑顧名思義,相對於某個路徑,那麼究竟相對於什麼路徑我們必須弄明白.按照上面jdk文件上講的這個路徑是”當前使用者目錄”也就是”

java虛擬機器的呼叫目錄”.更明白的說這個路徑其實是我們在哪裡呼叫jvm的路徑.舉個例子:

假設有一java原始檔Example.java在d盤根目錄下,該檔案不含package資訊.我們進入命令列視窗,然後使用”d:”命令切換到d盤根目錄下,然後

用”javacExample.java”來編譯此檔案,編譯無錯後,會在d盤根目錄下自動生成”Example.class”檔案.我們在呼叫”javaExample”來執行

該程式.此時我們已經啟動了一個jvm,這個jvm是在d盤根目錄下被啟動的,所以此jvm所載入的程式中File類的相對路徑也就是相對這個路徑的,即

d盤根目錄:D:\.同時”當前使用者目錄”也是D:\.在System.getProperty(“user.dir”);系統變數”user.dir”存放的也是這個值.

我們可以多做幾次試驗,把”Example.class”移動到不同路徑下,同時在那些路徑下,執行”javaExample”命令啟動jvm,我們會發現這個”當前

使用者目錄”是不斷變化的,它的路徑始終和我們在哪啟動jvm的路徑是一致的.

搞清了這些,我們可以使用相對路徑來建立檔案,例如:

File file = new File(“a.txt”);

file.createNewFile();

假設jvm是在”D:\”下啟動的,那麼a.txt就會生成在D:\a.txt;

此外,這個引數還可以使用一些常用的路徑表示方法,例如”.”或”.\”代表當前目錄,這個目錄也就是jvm啟動路徑.所以如下程式碼能得到當前目

錄完整路徑:

File f = new File(“.”);

String absolutePath = f.getAbsolutePath();

System.out.println(absolutePath);//D:\

最後要說說在eclipse中的情況:

Eclipse中啟動jvm都是在專案根路徑上啟動的.比如有個專案名為blog,其完整路徑為:D:\work\IDE\workspace\blog.那麼這個路徑就是jvm的啟

動路徑了.所以以上程式碼如果在eclipse裡執行,則輸出結果為”D:\work\IDE\workspace\blog.”

Tomcat中的情況.

如果在tomcat中執行web應用,此時,如果我們在某個類中使用如下程式碼:

File f = new File(“.”);

String absolutePath = f.getAbsolutePath();

System.out.println(absolutePath);

那麼輸出的將是tomcat下的bin目錄.我的機器就是”D:\work\server\jakarta-tomcat-5.0.28\bin\.”,由此可以看出tomcat伺服器是在bin目

錄下啟動jvm的.其實是在bin目錄下的” catalina.bat”檔案中啟動jvm的.