背景介绍

有些代码安全扫描工具会识别出代码中的 File.getAbsolutePath() 并建议将其替换为 File.getCanonicalPath() ,那么这两个方法有什么区别呢?

java.io.File

java.io.File 类包含3种获取文件系统路径的方法:

  • getPath()
  • getAbsolutePath()
  • getCanonicalPath()

    getPath()

    getPath() 返回的是定义时的路径(相对路径 or 绝对路径),跟创建File 对象时传入的路径参数有关。
    //TODO 补充Example

    getAbsolutePath()

    getAbsolutePath() 返回的是定义时路径的绝对路径,但不会处理 . .. 的路径表示。
    //TODO 补充Example

    getCanonicalPath()

    getCanonicalPath() 返回的是规范化的绝对路径,相当于将 getAbsolutePath() 中的... 解析后替换成真实路径。
    //TODO 补充Example

标注

[1] . 指目录本身

[2] .. 指该目录的上一级目录


参考文章: