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文件。
绝对路径就不说了,很简单没啥可说的。
【推荐博客】