System.out.println(new File("").getAbsolutePath());即是user.dir的路径,分析代码如下
//File类的初始化
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
//fs在window下是类Win32FileSyste
//分析fs.normalize方法的返回值应为””
this.path = fs.normalize(pathname);
//分析fs.prefixLength方法的返回值应为0
this.prefixLength = fs.prefixLength(this.path);
}
//getAbsolutePath方法
该方法中直接调用fs.resolve(this);代码如下
//返回this.prefixLength,即为0
int pl = f.getPrefixLength();
if ((pl == 2) && (path.charAt(0) == slash))
return path; /* UNC */
if (pl == 3)
return path; /* Absolute local */
if (pl == 0)
// getUserPath()方法主要是从System.getProperty("user.dir")取得目录
return getUserPath() + slashify(path); /* Completely relative */
new File(".").getAbsolutePath()与上面的类似
fs.normalize方法的返回值应为”.”
fs.prefixLength的返回值为0
而new File("aaa").getAbsolutePath()的目录也是user.dir/aaa
new File("", "aaa")时,""是parent
值为:
public String getDefaultParent() {
return ("" + slash);
}
//初始化如下
public File(String parent, String child) {
if (child == null) {
throw new NullPointerException();
}
if (parent != null) {
if (parent.equals("")) {
//空的情况,需要注意的是如果传入的是".",则要走到else里面
this.path = fs.resolve(fs.getDefaultParent(),
fs.normalize(child));
} else {
//包括.的情况
this.path = fs.resolve(fs.normalize(parent),
fs.normalize(child));
}
} else {
//null的情况
this.path = fs.normalize(child);
}
this.prefixLength = fs.prefixLength(this.path);
}