文档章节

File类的getPath、getAbsolutePath和getCanonicalPath的不同

米多范er
 米多范er
发布于 2014/03/12 13:04
字数 1400
阅读 8.3K
收藏 9

3 月,跳不动了?>>>

一、概念上的不同

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 void diff_pathAndAbsolutePath(){
    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得到的是构造参数的路径。

getAbsolutePath得到的是全路径。如果构造参数是相对路径,则返回当前目录的绝对路径+构造参数路径;如果是绝对路径则直接返回。

2.getAbsolutePath()getCanonicalPath()的区别

public void diff_AbsolutePathAndCanonicalPath() throws IOException{
    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

结论:

getCanonicalPath得到的不仅是全路径,而且会解析并剔除[..]这样的符号,即给出一个标准的绝对路径。

3.getCanonicalPath()自身的区别

就是解释这段话:

每个表示现存文件或目录的路径名都有一个惟一的规范形式。每个表示不存在文件或目录的路径名也有一个惟一的规范形式。不存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现存文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。
public void diff_canonicalPathAndSelf() throws IOException{
    File file = new File("D:\\Text.txt");
    System.out.println(file.getCanonicalPath());
}

操作步骤:

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

D:\Text.txt

(2)在D盘下建立一个文件,名叫text.txt,再次执行代码,得到结果是:

D:\text.txt

(3)在linux系统中按以上步骤运行代码。得到的结果是:

两次结果一样。

结论:

window是大小写不敏感的,也就是说在windows上test.txt和Test.txt是一个文件,所以在windows上当文件不存在时,得到的路径就是按照输入的路径。但当文件存在时,就会按照实际的情况来显示。这也就是建立文件后和删除文件后会有不同的原因。文件夹和文件类似。而在linux系统中,大小写是敏感的。


本文转载自:http://dreamstone.iteye.com/blog/118020

米多范er
粉丝 27
博文 26
码字总数 10974
作品 0
海淀
技术主管
私信 提问
加载中

评论(0)

getPath() getAbsolutePath() getCanonicalPath()不同之处

import java.io.File;public class PathTesting {public static void main(String [] args) {File f = new File("test/.././file.txt");System.out.println(f.getPath());System.out.println......

Oscarfff
2016/04/26
58
0
Eclispe下集成JFinal中jetty包作为开发环境

一、下载jetty包, 1.如果是gradle 或是maven项目地址在这,jetty-server包http://maven.oschina.net/index.html#nexus-search;quick~com.jfinal 二、引入JettyServer类(核心类),Scanner类(......

魔法王者安琪拉
2014/03/26
4K
2
#jboot jar包运行包空指针的问题

尝试用,maven-assembly-plugin 插件打成单个可执行jar,但是getRootClassPath报空指针。看jboot源码有个isRunInJar方法,但是没有调用 Jboot.java public static boolean isRunInJar() { if...

jimchow
2018/06/07
267
2
Java基础-File类的相关知识和常用方法

File类 继承Object类 实现了Serializable和Comparable接口 文件和目录路径名对抽象表现形式 File类的构造方法 File(String pathname) :根据一个路径得到一个File对象 把根目录下的路径为/Us...

NONAME999
2018/12/07
0
0
java IO流技术 之 File

IO流技术   概念:input - output 输入输出流:   输入:将文件读到内存中;   输出:将文件从内存中写出到其他地方   作用:主要就是解决设备和设备之间的数据传输问题。 File :文...

当当当当蛋糕
2016/12/07
9
0

没有更多内容

加载失败,请刷新页面

加载更多

如何使div的浏览器窗口高度为100% - How to make a div 100% height of the browser window

问题: I have a layout with two columns - a left div and a right div . 我有两列的布局-左div和右div 。 The right div has a grey background-color , and I need it to expand vertic......

技术盛宴
今天
20
0
SSM框架整合

mybatis逆向工程 mybatis-generator生成pojo、mapper接口及映射文件 mapper放到e3-manager-dao层中 导入sql到数据库中; 导入逆向工程工具,配置xml文件 运行main方法 重复运行main不会覆盖!...

七宝1
今天
30
0
OSChina 周日乱弹 —— 和网友的第一次开房经历

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《Ljósið》- Ólafur Arnalds 手机党少年们想听歌,请使劲儿戳(这里) @xiaos...

小小编辑
今天
54
0
程序员职业生涯指引

程序员应该尽早规划自己的职业生涯 为什么写 众所周知 IT 这一行到了一定的年龄、大部分人都或多或少有危机感,特别是今年全国乃至全球发生的疫情、导致整体经济受到很大的影响、这次的疫情影...

科比可比克
今天
11
0
JVM调优实战分析

一、查看服务器项目JVM参数以及参数分析 1、jps 命令 : 列出系统中所有的 Java 应用程序以及PID 如下图所示,26647就是我部署在服务器的一个小项目的 PID 2、jmap命令:查看堆的使用情况 如...

IT-Mamba
今天
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部