Java中的文件路徑問題


筆者是個菜鳥,路徑問題在寫項目時經常令我迷惑,所以在此寫下總結。

一、相對路徑

1、在Java中相對路徑,相對的是JVM的啟動路徑,而一般來說就是在項目名稱下啟動的。

在這里我用的Eclipse寫的示例,這是測試項目的目錄

示例代碼:

public class Demo1 {

    public static void main(String[] args) throws Exception{
        File f1 = new File("test1.txt");
        File f2 = new File("./test2.txt");
        File f3 = new File("src/test3.txt");
        File f4 = new File("test4.txt");
        System.out.println(f1.exists()+":"+f1.getCanonicalPath());
        System.out.println(f2.exists()+":"+f2.getCanonicalPath());
        System.out.println(f3.exists()+":"+f3.getCanonicalPath());
        System.out.println(f4.exists()+":"+f4.getCanonicalPath());
    }

}

輸出:

true:D:\spam\path\test1.txt
true:D:\spam\path\test2.txt
true:D:\spam\path\src\test3.txt
false:D:\spam\path\test4.txt

說明:

①從示例中我們可以看到所有的文件都是相對於D:\spam\path這個路徑建立的。

②"./test2"與"test1"表示的都是一樣的語義,相對與當前JVM的啟動目錄

③"../test"表示相對於當前目錄的上一級目錄

④test4告訴我們File的語義表示的僅僅是一個路徑

2、getPath()、getAbsolutePath()、getCanonicalPath()區別

示例:

public class Demo1 {

    public static void main(String[] args) throws Exception{
        File f1 = new File("test1.txt");
        File f2 = new File("./test2.txt");
        File f3 = new File("src/test3.txt");
        System.out.println(f1.exists()+":"+f1.getPath());
        System.out.println(f2.exists()+":"+f2.getAbsolutePath());
        System.out.println(f2.exists()+":"+f2.getCanonicalPath());
        System.out.println(f2.exists()+":"+f2.getPath());
        System.out.println(f3.exists()+":"+f3.getCanonicalPath());
    }

}

輸出:

true:test1.txt
true:D:\spam\path\.\test2.txt
true:D:\spam\path\test2.txt
true:.\test2.txt
true:D:\spam\path\src\test3.txt

說明:

①getPath():可以看到得到的就是創建File時的字符串

②getAbsolutePath():得到沒有解析過的絕對路徑

③getCanonicalPath():得到規范的絕對路徑

 3、加載文件Class.getResource(String path)

示例:

public class Demo2 {
    public static void main(String[] args) throws Exception{
        Class<?> c = Demo2.class;
        System.out.println(c.getResource(""));
        System.out.println(c.getResource("/"));
        System.out.println(c.getResource("").toURI());
        File f1 = new File(c.getResource("/test3.txt").toURI());
        System.out.println(f1.exists()+":"+f1.getPath());
    }
}

輸出:

file:/D:/spam/path/bin/test/
file:/D:/spam/path/bin/
file:/D:/spam/path/bin/test/
true:D:\spam\path\bin\test3.txt

說明:

getResource(String path)方法一般用於加載文件,且是相對於D:/spam/path/bin目錄的,

bin目錄與src目錄基本對應,bin目錄存放.class文件src目錄存放.java文件。

絕對路徑就不說了,很簡單沒啥可說的。

【推薦博客】

1、本地情況下 HTML文件中 五種相對路徑

2、Java中文件的相對路徑與絕對路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM