file的getPath getAbsolutePath和getCanonicalPath的不一样

file的这几个取得path的方法各有不一样,下边说说详细的区别

概念上的区别:(内容来自jdk,我的感受这个描述信息,只能让明白的人明白,不明白的人看起来仍是有点难度(特别试中文版,英文版稍好些)因此在概念以后我会举例说明。若是感受看概念很累就跳过直接看例子吧。看完例子回来看概念会好些。
java

getPath
public String getPath()将此抽象路径名转换为一个路径名字符串。所获得的字符串使用默认名称分隔符来分隔名称序列中的名称。

返回:
此抽象路径名的字符串形式
windows


getAbsolutePath
public String getAbsolutePath()返回抽象路径名的绝对路径名字符串。
若是此抽象路径名已是绝对路径名,则返回该路径名字符串,这与 getPath() 方法同样。若是此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性 user.dir 指定。不然,使用与系统有关的方式分析此路径名。在 UNIX 系统上,经过根据当前用户目录分析某一相对路径名,可以使该路径名成为绝对路径名。在 Microsoft Windows 系统上,经过由路径名指定的当前驱动器目录(若是有)来分析某一相对路径名,可以使该路径名成为绝对路径名;不然,能够根据当前用户目录来分析它。


返回:
绝对路径名字符串,它与此抽象路径名表示相同的文件或目录的
抛出:
SecurityException
- 若是没法访问所需的系统属性值。
另请参见:
isAbsolute()
安全


getCanonicalPath
public String getCanonicalPath()
                       
throws IOException返回抽象路径名的规范路径名字符串。
规范路径名是绝对路径名,而且是唯一的。规范路径名的准肯定义与系统有关。若有必要,此方法首先将路径名转换成绝对路径名,这与调用 getAbsolutePath() 方法的效果同样,而后用与系统相关的方式将它映射到其唯一路径名。这一般涉及到从路径名中移除多余的名称(好比
".""..")、分析符号链接(对于 UNIX 平台),以及将驱动器名转换成标准大小写形式(对于 Microsoft Windows 平台)。

表示现有文件或目录的每一个路径名都有一个唯一的规范形式。表示非存在文件或目录的每一个路径名也有一个唯一的规范形式。非存在文件或目录路径名的规范形式可能不一样于建立文件或目录以后同一路径名的规范形式。一样,现有文件或目录路径名的规范形式可能不一样于删除文件或目录以后同一路径名的规范形式。


返回:
表示与此抽象路径名相同的文件或目录的规范路径名字符串
抛出:
IOException
- 若是发生 I/O 错误(多是由于构造规范路径名须要进行文件系统查询)
SecurityException
- 若是没法访问所需的系统属性值,或者存在安全管理器,且其 SecurityManager.checkRead(java.io.FileDescriptor) 方法拒绝对该文件进行读取访问
从如下版本开始:
JDK1.
1
spa


2、例子:
1,getPath()与getAbsolutePath()的区别
.net

public static void test1(){
       File file1
= new File(".\\test1.txt");
       File file2
= new File("D:\\workspace\\test\\test1.txt");
       System.out.println(
"-----默认相对路径:取得路径不一样------");
       System.out.println(file1.getPath());
       System.out.println(file1.getAbsolutePath());
       System.out.println(
"-----默认绝对路径:取得路径相同------");
       System.out.println(file2.getPath());
       System.out.println(file2.getAbsolutePath());
       
   }
blog


获得的结果:
ip

-----默认相对路径:取得路径不一样------
.\test1.txt
D:\workspace\test\.\test1.txt
-----默认绝对路径:取得路径相同------
D:\workspace\test\test1.txt
D:\workspace\test\test1.txt
字符串

由于getPath()获得的是构造file的时候的路径。
getAbsolutePath()获得的是全路径
若是构造的时候就是全路径那直接返回全路径
若是构造的时候试相对路径,返回当前目录的路径+构造file时候的路径

2,getAbsolutePath()和getCanonicalPath()的不一样
get

public static void test2() throws Exception{
       File file
= new File("..\\src\\test1.txt");
       System.out.println(file.getAbsolutePath());
       System.out.println(file.getCanonicalPath());
   }
it

获得的结果

D:\workspace\test\..\src\test1.txt
D:\workspace\src\test1.txt

能够看到CanonicalPath不可是全路径,并且把..或者.这样的符号解析出来。
3,getCanonicalPath()和本身的不一样。
就是解释这段话:

表示现有文件或目录的每一个路径名都有一个唯一的规范形式。表示非存在文件或目录的每一个路径名也有一个唯一的规范形式。非存在文件或目录路径名的规范形式可能不一样于建立文件或目录以后同一路径名的规范形式。一样,现有文件或目录路径名的规范形式可能不一样于删除文件或目录以后同一路径名的规范形式。

单下边这段代码是看不到结果的,要配合必定的操做来看。下边操做步骤,同时讲解

public static void test3() throws Exception{
       File file
= new File("D:\\Text.txt");
       System.out.println(file.getCanonicalPath());
   }

步骤:
肯定你的系统是Windows系统。
(1),肯定D盘下没有Text.txt这个文件,直接执行这段代码,获得的结果是:

D:\Text.txt

注意这里试大写的Text.txt
(2)在D盘下创建一个文件,名叫text.txt,再次执行代码,获得结果

D:\text.txt

一样的代码获得不一样的结果。同时能够对比getAbsolutePath()看看,这个获得的结果是同样的。缘由:window是大小写不敏感的,也就是说在windows上test.txt和Test.txt是一个文件,因此在windows上当文件不存在时,获得的路径就是按照输入的路径。但当文件存在时,就会按照实际的状况来显示。这也就是创建文件后和删除文件后会有不一样的缘由。文件夹和文件相似。

相关文章
相关标签/搜索