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文件。

绝对路径就不说了,很简单没啥可说的。

猜你喜欢

转载自www.cnblogs.com/mgblogs/p/12404343.html