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

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

getPath
public String getPath()将此抽象路径名转换为一个路径名字符串。所得到的字符串使用默认名称分隔符来分隔名称序列中的名称。 返回:
此抽象路径名的字符串形式
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

二、例子:
1,getPath()与getAbsolutePath()的区别

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());}

得到的结果:

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

因为getPath()得到的是构造file的时候的路径。
getAbsolutePath()得到的是全路径
如果构造的时候就是全路径那直接返回全路径
如果构造的时候试相对路径,返回当前目录的路径+构造file时候的路径

2,getAbsolutePath()和getCanonicalPath()的不同

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

得到的结果

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上当文件不存在时,得到的路径就是按照输入的路径。但当文件存在时,就会按照实际的情况来显示。这也就是建立文件后和删除文件后会有不同的原因。文件夹和文件类似。

三、最后:
1,尝试在linux下执行上边的步骤,两次打印的结果是相同的,因为linux是大小写敏感的系统。
2,手动删掉test.txt,然后尝试执行下边代码

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

执行上边两个函数,看看结果,然后思考一下为什么?
1,的结果是两个大写,
2,的结果试两个小写
连续两个大写的,是否跟上边的矛盾 ?
这是因为虚拟机的缓存机制造成的。第一次File file = new File(“D:\Text.txt”);决定了结果.

Java中file类getPath(),getAbsolutePath(),getCanonicalPath()方法区别相关推荐

  1. java getabsolutepath,详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别

    简单看一下描述,例子最重要. 1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 返回绝对路径,但不会处理"."和".."的情况 ...

  2. java中的path类_详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别

    简单看一下描述,例子最重要. 1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 2.getAbsolutePath(): 返回绝对路径,但不会处理".&qu ...

  3. JAVA中File类的getPath()、getAbsolutePath()、getCanonical()

    1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 2.getAbsolutePath(): 返回绝对路径,但不会处理"."和"-&quo ...

  4. Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别

    File API在Java中非常重要,因为它使文件系统可以访问Java程序. 尽管Java的文件API丰富,但是使用它们时仍需要了解许多细节. 关于文件路径的常见查询程序员之一是getPath() , ...

  5. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  6. Java中File类之createNewFile、mkdirs

    Java中File类 1. 概述 2. mkdirs与mkdir区别 2.1 基本概念 2.2 程序实例 3. createNewFile 3.1 基本概念 3.2 程序范例 1. 概述 File 对 ...

  7. 手把手带你入门Java中File类

    零基础学习Java之File类 概述 构造方法 基本介绍 代码示例 常用方法 获取文件和目录的基本信息 代码示例 判断功能 代码示例 创建和删除功能 代码示例 目录遍历功能 代码示例 概述 要学习Ja ...

  8. Java中File类中getAbsolutePath、getPath​、getName、length普通方法用法示例代码

    File类中getAbsolutePath.getPath​.getName.length普通方法用法示例 总概述:         String getAbsolutePath​() 返回此抽象路径 ...

  9. java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别

    今天看一个例子,里面用到File类的getCanonicalPath()方法,忽然忘记这个方法返回的是什么样的路径了,跟getPath()和getAbsolutePath()有什么区别?带着这两个问题 ...

最新文章

  1. eclipse 搜索使用。
  2. 深入Java泛型(三):泛型的上下边界
  3. grails 转为java_创建一个grails项目,然后转成maven项目
  4. 适合于小团队产品迭代的APP测试流程
  5. java中super()_Java 泛型中 extends 和 super 的区别是什么?
  6. 10个相似图片搜索以图找图的网站
  7. linux串口传文件除了rz,使用sz/rz基于串口传输文件
  8. WGAN-GP代码注释
  9. DFS应用——遍历无向图
  10. java - 计算距离和反弹
  11. 利用JAVA手机登录页面_Java用户登陆界面例子 代码
  12. 【Qt】QTableView中嵌入复选框CheckBox 的四种方法总结
  13. CCF201604-5 网络连接(募集解题代码)
  14. qcow2、raw、vmdk等镜像格式
  15. 做了一天的程序,很困啊,明天还要赶着去上课
  16. xcode 左边导航栏中,类文件后面的标记“A”,M,?……等符号的含义???(转)...
  17. nodejs 任务调度bull 测试解析
  18. CSS案例——静态网页制作
  19. A Knee_Guided Evolutionary Algorithm for Compressing Deep Neural Network (KGEA)解读
  20. 如何使用计算机上合并计算方法,excel如何使用合并计算

热门文章

  1. 虹科PagerDuty为澳大利亚零售巨头提供始终在线的数字体验
  2. 独家| ChinaLedger白硕:区块链中的隐私保护
  3. apollo 配置中心安装
  4. VB 指定IE控件WebBrowser1的内核版本为IE11
  5. 卸载流氓软件奇安信天擎(无需密码,无需关闭自我保护)
  6. 分子生物学词汇(P~R)
  7. 如何哄你的女朋友开心?
  8. 反射内存 延时_反射内存网与工业以太网互为补充
  9. scala中Nil用法
  10. C++动态数组vector实现