new file("")的结果分析

System.out.println(new File("").getAbsolutePath());即是user.dir的路径,分析代码如下

 

//File类的初始化

public File(String pathname) {

    if (pathname == null) {

        throw new NullPointerException();

    }

    //fswindow下是类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);
    }

你可能感兴趣的:(File)