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

</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


可以看出即使磁盘上不存在实际的文件也是可以打印出路径的。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


滴水石穿!!!








 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值