【查漏补缺】File的path、absolutePath和canonicalPath的区别
程序员文章站
2022-11-27 16:32:38
背景 在学习Idea的插件开发时,用到了相关的 这个东西,里面的 有一个 方法引起了我的注意,我发现我不知道—— 科普 首先知晓一下几个名词—— 路径 、 绝对路径/相对路径 、 规范路径(不知道准不准确) 然后考虑以下几种路径: 1. c:\temp\file.txt 2. .\file.txt ......
背景
在学习idea的插件开发时,用到了相关的virtualfilesystem
这个东西,里面的virtualfile
有一个getcanonicalpath()
方法引起了我的注意,我发现我不知道——
科普
首先知晓一下几个名词——路径、绝对路径/相对路径、规范路径(不知道准不准确)
然后考虑以下几种路径:
- c:\temp\file.txt
- .\file.txt
- c:\temp\myapp\bin\..\..\file.txt
第一类,属于路径,绝对路径,规范路径
第二类,属于路径,相对路径
第三类,属于路径,绝对路径
我们结合自己的开发经验,发现绝大多数情况都已经被覆盖到了,那么我们可以大致推测,路径
包含绝对路径/相对路径
,绝对路径
包含规范路径
,而相对路径
不包含规范路径
。
实战
/* -------这是一个规范路径的代码------- */ file file = new file("c:\\users\\w650\\desktop\\701studio\\app.js"); system.out.println("file.getabsolutepath() -> " + file.getabsolutepath()); system.out.println("file.getcanonicalpath() -> " + file.getcanonicalpath()); system.out.println("file.getpath() -> " + file.getpath()); /* -------输出------- */ file.getabsolutepath() -> c:\users\w650\desktop\701studio\app.js file.getcanonicalpath() -> c:\users\w650\desktop\701studio\app.js file.getpath() -> c:\users\w650\desktop\701studio\app.js
/* -------这是一个绝对路径的代码(但不规范)------- */ file file = new file("c:\\users\\w650\\desktop\\701studio\\utils\\..\\app.js"); system.out.println("file.getabsolutepath() -> " + file.getabsolutepath()); system.out.println("file.getcanonicalpath() -> " + file.getcanonicalpath()); system.out.println("file.getpath() -> " + file.getpath()); /* -------输出------- */ file.getabsolutepath() -> c:\users\w650\desktop\701studio\utils\..\app.js file.getcanonicalpath() -> c:\users\w650\desktop\701studio\app.js file.getpath() -> c:\users\w650\desktop\701studio\utils\..\app.js
/* -------这是一个相对路径的代码------- */ file file = new file("..\\..\\..\\test.txt"); system.out.println("file.getabsolutepath() -> " + file.getabsolutepath()); system.out.println("file.getcanonicalpath() -> " + file.getcanonicalpath()); system.out.println("file.getpath() -> " + file.getpath()); /* -------输出------- */ file.getabsolutepath() -> e:\commonworkspace\ideaplugindevguide\devguide-virtualfilesystem\..\..\..\test.txt file.getcanonicalpath() -> e:\test.txt file.getpath() -> ..\..\..\test.txt
结论
- 路径包含绝对路径和相对路径,绝对路径又包含了规范路径。
-
getpath()
会返回给用户创建file的路径,getabsolutepath
会依据调用该方法的类所在的路径 + 文件分隔符 + 创建file的路径
构造绝对路径,getcanonicalpath()
一定返回规范的路径。
参考
what's the difference between getpath(), getabsolutepath(), and getcanonicalpath() in java?
上一篇: 让PHP更快的提供文件下载的代码
下一篇: 我的朋友死了