按照jdk Doc上的說法”絕對路徑名是完整的路徑名,不需要任何其他信息就可以定位自身表示的文件。相反,相對路徑名必須使用來自其他路徑名的信息進行解釋。默認(rèn)情況下,java.io 包中的類總是根據(jù)當(dāng)前用戶目錄來分析相對路徑名。此目錄由系統(tǒng)屬性 user.dir 指定,通常是 Java 虛擬機的調(diào)用目錄.”\x0d\x0a \x0d\x0a相對路徑顧名思義,相對于某個路徑,那么究竟相對于什么路徑我們必須弄明白.按照上面jdk文檔上講的這個路徑是”當(dāng)前用戶目錄”也就是”java虛擬機的調(diào)用目錄”.更明白的說這個路徑其實是我們在哪里調(diào)用jvm的路徑.舉個例子:\x0d\x0a \x0d\x0a假設(shè)有一java源文件Example.java在d盤根目錄下,該文件不含package信息.我們進入命令行窗口,然后使用”d:”命令切換到d盤根目錄下,然后用”javac Example.java”來編譯此文件,編譯無錯后,會在d盤根目錄下自動生成”Example.class”文件.我們在調(diào)用”java Example”來運行該程序.此時我們已經(jīng)啟動了一個jvm,這個jvm是在d盤根目錄下被啟動的,所以此jvm所加載的程序中File類的相對路徑也就是相對這個路徑的,即d盤根目錄:D:/.同時” 當(dāng)前用戶目錄”也是D:/.在System.getProperty(“user.dir”);系統(tǒng)變量”user.dir”存放的也是這個值.\x0d\x0a我們可以多做幾次試驗,把”Example.class”移動到不同路徑下,同時在那些路徑下,執(zhí)行”java Example”命令啟動jvm,我們會發(fā)現(xiàn)這個”當(dāng)前用戶目錄”是不斷變化的,它的路徑始終和我們在哪啟動jvm的路徑是一致的.\x0d\x0a搞清了這些,我們可以使用相對路徑來創(chuàng)建文件,例如:\x0d\x0aFile file = new File(“a.txt”);\x0d\x0aFile.createNewFile();\x0d\x0a假設(shè)jvm是在”D:/”下啟動的,那么a.txt就會生成在D:/a.txt;\x0d\x0a此外,這個參數(shù)還可以使用一些常用的路徑表示方法,例如”.”或”./”代表當(dāng)前目錄,這個目錄也就是jvm啟動路徑.所以如下代碼能得到當(dāng)前目錄完整路徑:\x0d\x0aFile f = new File(“.”);\x0d\x0aString absolutePath = f.getAbsolutePath();\x0d\x0aSystem.out.println(absolutePath);//D:/\x0d\x0a最后要說說在eclipse中的情況:\x0d\x0aEclipse中啟動jvm都是在項目根路徑上啟動的.比如有個項目名為blog,其完整路徑為:D:/work/IDE/workspace/blog.那么這個路徑就是jvm的啟動路徑了.所以以上代碼如果在eclipse里運行,則輸出結(jié)果為” D:/work/IDE/workspace/blog.”\x0d\x0a \x0d\x0aTomcat中的情況.\x0d\x0a如果在tomcat中運行web應(yīng)用,此時,如果我們在某個類中使用如下代碼:\x0d\x0aFile f = new File(“.”);\x0d\x0aString absolutePath = f.getAbsolutePath();\x0d\x0aSystem.out.println(absolutePath);\x0d\x0a那么輸出的將是tomcat下的bin目錄.我的機器就是” D:/work/server/jakarta-tomcat-5.0.28/bin/.”,由此可以看出tomcat服務(wù)器是在bin目錄下啟動jvm的.其實是在bin目錄下的” catalina.bat”文件中啟動jvm的.
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站設(shè)計、伽師網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、伽師網(wǎng)絡(luò)營銷、伽師企業(yè)策劃、伽師品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供伽師建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
如果你的生成File的文件和a.jpg在同一級的話。你用File f=new File("a.jpg");\x0d\x0a如果你的生成File的文件和a.jpg不在同一級的話:1.File在外,a.jpg在pic文件夾則File f=new File("pic/a.jpg");\x0d\x0a2.File在file文件夾,a.jpg在pic文件夾則File f=new File("../pic/a.jpg");\x0d\x0a3.File在file文件夾,a.jpg外則File f=new File("../a.jpg");
test
|
src
|
t090417
|
test.properties
Read.java
test.properties:
TEST=test
Read.java:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
public class Read {
public static String TEST ;
private static Properties loadPropertyFile() throws FileNotFoundException,IOException{
Properties properties = new Properties() ;
FileInputStream fs = new FileInputStream("src/t090417/test.properties");
properties.load(fs);
return properties ;
}
public static void loadProperty(){
try{
Properties properties = loadPropertyFile();
TEST = properties.getProperty("TEST");
System.out.println("read from properties: "+TEST);
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
loadProperty();
}
}
其中用的就是相對路徑!