</pre><span style="white-space:pre"></span>最近在详读java核心技术卷1,发现许多不明白的地方,从今天开始在此记录下来,同时也帮助同学们更好的理解这本书:<p></p><p> 今天遇到的问题是file类中三种获取路径的方法getPath(),getAbsolutePath(),getCanonicalPath()的比较。</p><p><span style="white-space:pre"></span>首先实验代码如下:</p><p><span style="white-space:pre"></span></p><pre name="code" class="java">public class FindeDirectory {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
File file = new File("..\\a.txt");
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
} catch(IOException e) {
}
}
}
情况1:使用相对路径,并且磁盘中上实际不存在a.txt这个文件,运行的结果为:
..\a.txt
C:\Users\dbtest\workspace\FindDirectories\..\a.txt
C:\Users\dbtest\workspace\a.txt
情况2:使用相对路径,但磁盘中实际存在A.txt(注意这里的大写)这个文件,运行的结果为:
..\a.txt
C:\Users\dbtest\workspace\FindDirectories\..\a.txt
C:\Users\dbtest\workspace\A.txt
发现了吗?上面的两行没有变,但最后一行最后变成磁盘上实际的文件名。
情况3:使用绝对路径,但磁盘中不存在a.txt,运行结果为:
D:\a.txt
D:\a.txt
D:\a.txt
情况4:使用绝对路径,但磁盘中实际存在A.txt,运行结果为:
D:\a.txt
D:\a.txt
D:\A.txt
总结:getPath()会得到file构造函数参数的值;getAbsolutePath()当参数为相对路径时会得到文件的绝对路径+相对路径,当参数为绝对路径时直接得到绝对路径;getCanonicalPath()当参数为相对路径为得到文件的绝对路径,当参数为绝对路径时得到文件的绝对路径。
getPath(),getAbsolutePath()不能实际分析磁盘中的文件,只是根据构造函数的参数来进行路径解析,但getCanonicalPath()会结合磁盘中的文件进行解析。究其原因其实是windows系统文件对大小写不敏感,也就是说在windows上a.txt 和A.txt是一个文件,所以当文件存在时,就会按照实际的情况来显示。而在linux系统是大小写敏感的。ps:朋友们可以试一下把盘的名字改成小写的d,看看输出结果。
参考:http://my.oschina.net/ywooer/blog/207494#OSC_h4_3
滴水石穿!!!