这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战。
我以为的 getAbsolutePath
可以拿着任意的文件名,得到这个文件在系统的绝对路径:
- 新建 File 对象
- 然后打印 这个 File 对象的
getAbsolutePath()方法:
public static void main(String[] args) {
//硬盘里真实存在的 位置:/Users/fang/Downloads/Eboss/论文/论文选题?.xlsx
File src = new File("论文选题?.xlsx");
System.out.println(src.getAbsolutePath());
System.out.println(src.getAbsoluteFile());
}
运行结果如下:
再看看这个 getAbsolutePath() 方法的源码:
这要是能打对就怪了。打出来的是工程的绝对路径。
用 user.dir 也可以打印出来当前工程的路径:
这个例子也说明了,构建文件的时候,相对于的目录一般是工程目录。
真要跨平台的话 path 应如何写?
我们知道,path 假如不变,那么一般就写死就好了。比如前文里,在 Mac 环境中,鼠标选中某个文件,然后 option+command+C就可以实现拷贝文件的绝对路径:
"/Users/fang/Downloads/Eboss/论文/论文选题?.xlsx" 这就比较好,因为直接粘出来就是
/来分割文件目录的。这种分割方式是跨平台也不会出错的。
有的平台,比如在 Windows 下的 eclipse 里面,粘贴一个目录出去就是:\\ 分割的。那这个目录在 Mac 电脑上跑就会报错。
那么还有一种方法,也可以跨平台不出错。用字符串拼接这个分隔符(File.separator):
File.separator + "Users" + File.separator + "fang" +...File.separator + "论文选题?.xlsx" 【举这个例子不是很合适,因为我这里的文件本来就只在我的本地电脑,跨平台跑肯定找不到。但是项目里会用到,所以先学习一波。有高手路过,还请多多指教!】
File.separator 在不同的系统下运行结果就不一样。
pathSeparator 是什么意思
这个真的很不好理解。直到我回忆起 Windows 系统里配置环境变量的情形,在 CLASSPATH 那里,有好多个软件的绝对路径,当他们都在输入框里的时候,就是用 ; 分割的。
Mac 的话,来打印看看:

就是说 pathSeparator 是用来分割一堆绝对路径用的分隔符。
(我觉得我这样讲比源码里说的明白多了==)