笔者是个菜鸟,路径问题在写项目时经常令我迷惑,所以在此写下总结。
一、相对路径
1、在Java中相对路径,相对的是JVM的启动路径,而一般来说就是在项目名称下启动的。
在这里我用的Eclipse写的示例,这是测试项目的目录
示例代码:
public classDemo1 {public static void main(String[] args) throwsException{
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.txttrue:D:\spam\path\test2.txttrue:D:\spam\path\src\test3.txtfalse:D:\spam\path\test4.txt
说明:
①从示例中我们可以看到所有的文件都是相对于D:\spam\path这个路径建立的。
②"./test2"与"test1"表示的都是一样的语义,相对与当前JVM的启动目录
③"../test"表示相对于当前目录的上一级目录
④test4告诉我们File的语义表示的仅仅是一个路径
2、getPath()、getAbsolutePath()、getCanonicalPath()区别
示例:
public classDemo1 {public static void main(String[] args) throwsException{
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.txttrue:D:\spam\path\.\test2.txttrue:D:\spam\path\test2.txttrue:.\test2.txttrue:D:\spam\path\src\test3.txt
说明:
①getPath():可以看到得到的就是创建File时的字符串
②getAbsolutePath():得到没有解析过的绝对路径
③getCanonicalPath():得到规范的绝对路径
3、加载文件Class.getResource(String path)
示例:
public classDemo2 {public static void main(String[] args) throwsException{
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文件。
绝对路径就不说了,很简单没啥可说的。
【推荐博客】