File類(lèi)是用來(lái)構(gòu)造文件或文件夾的類(lèi),在其構(gòu)造函數(shù)中要求傳入一個(gè)String類(lèi)型的參數(shù),用于指示文件所在的路徑.以前一直使用絕對(duì)路徑作為參數(shù),其實(shí)這里也可以使用相對(duì)路徑.使用絕對(duì)路徑不用說(shuō),很容易就能定位到文件,那么使用了相對(duì)路徑jvm如何定位文件的呢?
按照jdk Doc上的說(shuō)法”絕對(duì)路徑名是完整的路徑名,不需要任何其他信息就可以定位自身表示的文件。相反,相對(duì)路徑名必須使用來(lái)自其他路徑名的信息進(jìn)行解釋。默認(rèn)情況下,java.io
包中的類(lèi)總是根據(jù)當(dāng)前用戶目錄來(lái)分析相對(duì)路徑名。此目錄由系統(tǒng)屬性 user.dir
指定,通常是 Java 虛擬機(jī)的調(diào)用目錄.”
相對(duì)路徑顧名思義,相對(duì)于某個(gè)路徑,那么究竟相對(duì)于什么路徑我們必須弄明白.按照上面jdk文檔上講的這個(gè)路徑是”當(dāng)前用戶目錄”也就是”java虛擬機(jī)的調(diào)用目錄”.更明白的說(shuō)這個(gè)路徑其實(shí)是我們?cè)谀睦镎{(diào)用jvm的路徑.舉個(gè)例子:
假設(shè)有一java源文件Example.java在d盤(pán)根目錄下,該文件不含package信息.我們進(jìn)入命令行窗口,然后使用”d:”命令切換到d盤(pán)根目錄下,然后用”javac Example.java”來(lái)編譯此文件,編譯無(wú)錯(cuò)后,會(huì)在d盤(pán)根目錄下自動(dòng)生成”Example.class”文件.我們?cè)谡{(diào)用”java Example”來(lái)運(yùn)行該程序.此時(shí)我們已經(jīng)啟動(dòng)了一個(gè)jvm,這個(gè)jvm是在d盤(pán)根目錄下被啟動(dòng)的,所以此jvm所加載的程序中File類(lèi)的相對(duì)路徑也就是相對(duì)這個(gè)路徑的,即d盤(pán)根目錄:D:\.同時(shí)” 當(dāng)前用戶目錄”也是D:\.在System.getProperty(“user.dir”);系統(tǒng)變量”user.dir”存放的也是這個(gè)值.
我們可以多做幾次試驗(yàn),把”Example.class”移動(dòng)到不同路徑下,同時(shí)在那些路徑下,執(zhí)行”java Example”命令啟動(dòng)jvm,我們會(huì)發(fā)現(xiàn)這個(gè)”當(dāng)前用戶目錄”是不斷變化的,它的路徑始終和我們?cè)谀膯?dòng)jvm的路徑是一致的.
搞清了這些,我們可以使用相對(duì)路徑來(lái)創(chuàng)建文件,例如:
File
file = new File(“a.txt”);
File.createNewFile();
假設(shè)jvm是在”D:\”下啟動(dòng)的,那么a.txt就會(huì)生成在D:\a.txt;
此外,這個(gè)參數(shù)還可以使用一些常用的路徑表示方法,例如”.”或”.\”代表當(dāng)前目錄,這個(gè)目錄也就是jvm啟動(dòng)路徑.所以如下代碼能得到當(dāng)前目錄完整路徑:
File f = new File(“.”);
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);//D:\
最后要說(shuō)說(shuō)在eclipse中的情況:
Eclipse中啟動(dòng)jvm都是在項(xiàng)目根路徑上啟動(dòng)的.比如有個(gè)項(xiàng)目名為blog,其完整路徑為:D:\work\IDE\workspace\blog.那么這個(gè)路徑就是jvm的啟動(dòng)路徑了.所以以上代碼如果在eclipse里運(yùn)行,則輸出結(jié)果為” D:\work\IDE\workspace\blog.”
Tomcat中的情況.
如果在tomcat中運(yùn)行web應(yīng)用,此時(shí),如果我們?cè)谀硞€(gè)類(lèi)中使用如下代碼:
File f = new File(“.”);
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);
那么輸出的將是tomcat下的bin目錄.我的機(jī)器就是” D:\work\server\jakarta-tomcat-5.0.28\bin\.”,由此可以看出tomcat服務(wù)器是在bin目錄下啟動(dòng)jvm的.其實(shí)是在bin目錄下的” catalina.bat”文件中啟動(dòng)jvm的.
posted on 2009-04-15 00:01
zhangchao 閱讀(17794)
評(píng)論(10) 編輯 收藏