2.2 Java中的getPath(),getAbsolutePath()和getCanonicalPath()有什么区别?bt| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>

**提问:Java中的getPath(),getAbsolutePath()和getCanonicalPath()有什么区别?
**

Java中的getPath(),getAbsolutePath()和getCanonicalPath()有什么区别?以及什么时候选择哪一个比较好?

回答1:

实践是检验真理的唯一标准。

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(f.getAbsolutePath());
        try {
            System.out.println(f.getCanonicalPath());
        }
        catch(Exception e) {}
    }
}
复制代码

使用上述代码会产生如下输出:

test\..\.\file.txt
C:\projects\sandbox\trunk\test\..\.\file.txt
C:\projects\sandbox\trunk\file.txt

复制代码

综上所述

1,getPath()为您提供基于File对象的路径,该路径可能是相对的,也可能不是相对的;

2,getAbsolutePath()为您提供文件的绝对路径;

3,getCanonicalPath()针对当前目录解析任何相对路径之后,获取路径字符串,并删除所有相对路径(.和..),并且任何文件系统链接都返回一个路径,文件系统认为该路径是引用它指向的文件系统对象的规范方法。

需要注意的是,有大量指向同一文件的绝对路径,但是只有一个规范路径。

举个例子

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

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

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

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

文章翻译自Stack Overflow :stackoverflow.com/questions/1…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享