java中file类的三种获取路径的方法getPath(),getAbsolutePath(),getCanonicalPath()的比较

最近在详读java核心技术卷1,发现许多不明白的地方,从今天开始在此记录下来,同时也帮助同学们更好的理解这本书:

        今天遇到的问题是file类中三种获取路径的方法getPath(),getAbsolutePath(),getCanonicalPath()的比较。

首先实验代码如下:

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


可以看出即使磁盘上不存在实际的文件也是可以打印出路径的。getPath()打印出了相对路径,getAbsolutePath()打印出了绝对路径+相对路径,而getCanonicalPath()打印出了绝对路径。

情况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


滴水石穿!!!








 
  

你可能感兴趣的:(java)