首先这段代码在Unix/Linux系统上会去找根路径,但在Windows系统上会去找C:盘还是D:盘还是其它盘呢?
其实它会去找user.dir所在盘符的根目录,user.dir即用户的当前工作目录,也就是你跑Java程序所在的目录,那么你跑Java程序所在路径的根盘符就是"/"指代的位置.
另外,由于\\ 和/ 在windows系统中的等效性,new File("\\")也会找到同一个盘符.
验证程序如下:
import java.io.File; import java.util.Properties; public class FileTest { public static void main(String[] args) { File filesFolder = new File("/"); System.out.println("filesFolder's absolute path=:'" + filesFolder.getAbsolutePath()+"'."); String userDir=System.getProperty("user.dir"); System.out.println("userDir='" + userDir+"'."); File filesFolder2 = new File("\\"); System.out.println("filesFolder2's absolute path=:'" + filesFolder2.getAbsolutePath()+"'."); //Properties props = System.getProperties(); //props.list(System.out); } }
输出:
filesFolder's absolute path=:'C:\'. userDir='C:\pleiades\userdir'. filesFolder2's absolute path=:'C:\'.
大家可以把这段程序分别放到C:,D:,E:盘跑一下,看看和我所说的是否一致.
这种写法有一个明显的好处是如果Windows系统程序运行所在盘下有和Unix/Linux下同样的路径,比如程序在D:盘下跑,数据文件在d:/usr/data/abc下,Unix下也有/usr/data/abc路径,那么路径部分不需修改就可直接使用了.
--END-- 2019-11-29 15:33