这几个方法是有一次无意的发现,我当时也不知道什么意思,就百度了,查到了一些列子:

原文地址http://www.blogjava.net/dreamstone/archive/2007/08/08/134968.html

一:介绍

getPath()
public String getPath()

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

返回:

此抽象路径名的字符串形式

getAbsolutePath()
<pre name="code" class="java">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");决定了结果.

File的getPath()和getAbsolutePath()和getCanonicalPath()的差别的更多相关文章

  1. File 类的 getPath()、getAbsolutePath()、getCanonicalPath() 的区别【转】

    File 类的 getPath().getAbsolutePath().getCanonicalPath() 的区别 感谢大佬:https://blog.csdn.net/zsensei/articl ...

  2. java里getPath、 getAbsolutePath、getCanonicalPath的区别

    本文链接:https://blog.csdn.net/wh_19910525/article/details/9314675 File的这三个方法在api中都有说明,仅以程序为例说明. package ...

  3. file的getPath getAbsolutePath和getCanonicalPath的不同

    file的这几个取得path的方法各有不同,下边说说详细的区别 概念上的区别:(内容来自jdk,个人感觉这个描述信息,只能让明白的人明白,不明白的人看起来还是有点难度(特别试中文版,英文版稍好些)所以 ...

  4. file的getPath getAbsolutePath和getCanonicalPath的区别

    转自:http://www.blogjava.net/dreamstone/archive/2007/08/08/134968.html file的这几个取得path的方法各有不同,下边说说详细的区别 ...

  5. [Java] 各种常用函数

    1.writeInt()和readInt() 这两个函数并不是写入一个整数,读取一个整数.它们实际上是写入4个字节,读取4个字节. writeInt(int i)把i按四个字节,二进制形式写到输出流里 ...

  6. Java -- File

    @.getPath().getAbsolutePath().getCanonicalPath()区别 原文:http://blog.csdn.net/wh_19910525/article/detai ...

  7. 【56】java本地文件File类详解

    1.java类的介绍 public class File extends Object implements Serializable, Comparable<File> 文件和目录路径名 ...

  8. 小师妹学JavaIO之:文件File和路径Path

    简介 文件和路径有什么关系?文件和路径又隐藏了什么秘密?在文件系统的管理下,创建路径的方式又有哪些?今天F师兄带小师妹再给大家来一场精彩的表演. 文件和路径 小师妹:F师兄我有一个问题,java中的文 ...

  9. Java编程的逻辑 (59) - 文件和目录操作

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

随机推荐

  1. 3ds Max 设置中文界面

    如果想要3ds Max 2016界面显示为中文,知道要怎么操作么?其实3ds Max 2016是一款支持多种语言的软件包,即便您在安装的时候没有选择相对应的语言,它也同时会把7中语言安装到您的电脑,其 ...

  2. 数字游戏(string的sort的应用)

    题目描述 牛牛举办了一场数字游戏,有n个玩家参加这个游戏,游戏开始每个玩家选定一个数,然后将这个数写在纸上(十进制数,无前缀零),然后接下来对于每一个数字将其数位按照非递减顺序排列,得到新的数,新数的 ...

  3. WordPress 增加 keywords 和 description

    WordPress 增加 keywords 和 description . <?php $keywords = '798资源网'; $description = '798资源网'; //文章页 ...

  4. [NOIP2012提高组]疫情控制

    题目:洛谷P1084.codevs1218.Vijos P1783. 题目大意:有一棵n个节点的,根为1的带权树和m支军队.每支军队可以在一个点上停下,那么从1开始就不能经过这个点了.现在有m支军队已 ...

  5. CentOS7 安装 MySQL 5.7

    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz yum -y ...

  6. thttpd 在S3C6410的移植-web服务程序的应用

    1.    在VMWare 虚拟机上将arm-linux-gcc 4.3.1配置好:2.    下载thttpd软件包并解压:3.    在thttpd根目录下运行:  ./configure:4.  ...

  7. Edward Frenkel关于几何化朗兰兹纲领的采访

    本文来自:菲尔兹奖座谈会 博客 Edward Frenkel教授的主要研究方向是数学与量子物理中的对称.他现在在做的许多问题都与朗兰兹纲领有关.他现在是加州大学伯克利分校的数学教授. 在今年的菲尔兹奖 ...

  8. Java基础学习总结(45)——JAVA单元测试工具比较

    1.简介 jtest是parasoft公司推出的一款针对java语言的自动化白盒测试工具,它通过自动实现java的单元测试和代码标准校验,来提高代码的可靠性.Jtest先分析每个java类,然后自动生 ...

  9. UVA 11825 - Hackers&#39; Crackdown 状态压缩 dp 枚举子集

    UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集 ACM 题目地址:option=com_onlinejudge&Itemid=8&page=sh ...

  10. 陈-朱-兴- js写法【案例】:

    ajax请求: 一.从服务器端请求数据: var url = '';url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='+ ...