为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的getPath(),getAbsolutePath()和getCanonicalPath

Java中的getPath(),getAbsolutePath()和getCanonicalPath

MMMHUHU 2019-08-23 14:40:42
Java中的getPath(),getAbsolutePath()和getCanonicalPath()有什么区别?什么之间的区别getPath(),getAbsolutePath()以及getCanonicalPath()在Java中?我什么时候使用每一个?
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

考虑这些文件名:


C:\temp\file.txt - 这是一条路径,一条绝对路径和一条规范路径。


.\file.txt - 这是一条路。它既不是绝对的道路,也不是规范的道路。


C:\temp\myapp\bin\..\\..\file.txt - 这是一条路径和绝对路径。这不是一个规范的道路。


规范路径始终是绝对路径。


从路径转换为规范路径使其成为绝对路径(通常在当前工作目录上添加,例如./file.txt变为c:/temp/file.txt)。文件的规范路径只是“净化”路径,删除和解析类似的东西..\并解析符号链接(在unixes上)。


另请注意以下使用nio.Paths的示例:


String canonical_path_string = "C:\\Windows\\System32\\";

String absolute_path_string = "C:\\Windows\\System32\\drivers\\..\\";


System.out.println(Paths.get(canonical_path_string).getParent());

System.out.println(Paths.get(absolute_path_string).getParent());

虽然两个路径都指向相同的位置,但输出将完全不同:


C:\Windows

C:\Windows\System32\drivers


查看完整回答
反对 回复 2019-08-23
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

让你头脑发热的重要一点是,File该类试图表示Sun喜欢称之为“分层路径名”的视图(基本上是类似c:/foo.txt或路径/usr/muggins)。这就是您根据路径创建文件的原因。您描述的操作是对此“路径名”的所有操作。

  • getPath()获取使用(../foo.txt)创建文件的路径

  • getAbsolutePath()获取创建文件的路径,但如果路径是相对的,则包含有关当前目录的信息(/usr/bobstuff/../foo.txt

  • getCanonicalPath() 尝试获取文件的绝对路径的唯一表示。这消除了“..”和“。”的间接方向。引用(/usr/foo.txt)。

注意我说尝试 - 在形成规范路径时,VM可以抛出一个IOException。这通常是因为它正在执行某些文件系统操作,其中任何一个都可能失败。


查看完整回答
反对 回复 2019-08-23
?
大话西游666

TA贡献1817条经验 获得超14个赞

简而言之:

  • getPath()获取File构造对象的路径字符串,它可能是相对当前目录。

  • getAbsolutePath() 如果它是相对的,则在解析当前目录后获取路径字符串,从而产生完全限定的路径。

  • getCanonicalPath()在解析当前目录的任何相对路径之后获取路径字符串,并删除任何相对路径(...),并删除任何文件系统链接以返回文件系统认为规范意味着引用它指向的文件系统对象的路径。

此外,每个都有一个File等效项,返回相应的File对象。


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 702 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号