我以为的 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就可以实现拷贝文件的绝对路径:
这就比较好,因为直接粘出来就是 / 来分割文件目录的。这种分割方式是跨平台也不会出错的。
有的平台,比如在 Windows 下的 eclipse 里面,粘贴一个目录出去就是:\\ 分割的。那这个目录在 Mac 电脑上跑就会报错。
那么还有一种方法,也可以跨平台不出错。用字符串拼接这个分隔符(File.separator):
File.separator + “Users” + File.separator + “fang” +…File.separator + “论文选题?.xlsx”
【举这个例子不是很合适,因为我这里的文件本来就只在我的本地电脑,跨平台跑肯定找不到。但是项目里会用到,所以先学习一波。有高手路过,还请多多指教!】
File.separator 在不同的系统下运行结果就不一样。
pathSeparator 是什么意思
这个真的很不好理解。直到我回忆起 Windows 系统里配置 环境变量 的情形,在 CLASSPATH 那里,有好多个软件的绝对路径,当他们都在输入框里的时候,就是用 ; 分割的。
Mac 的话,来打印看看:
就是说 pathSeparator 是用来分割一堆绝对路径用的分隔符。
(我觉得我这样讲比 源码 里说的明白多了==)