先贴File类所对应的构造函数:
- public File(String pathname) {
- if (pathname == null) {
- throw new NullPointerException();
- }
- this.path = fs.normalize(pathname);//①
- this.prefixLength = fs.prefixLength(this.path);
- }
复制代码
从①处代码可以看到java在接收String类型的pathname的时候,会根据本地文件系统对该pathname进行标准化(fs.normalize(path)),并返回标准的路径名。就是说不管你输入的是:C://test.txt、C:\\test.txt、C://test.txt,甚至是C:\\/////test.txt,java都能从该字符串中解析出正确的路径名,这是由不同系统所对应的normalize()方法所决定的。
我的文件系统是windows NTFS文件系统,有兴趣看下该文件系统所对应的normalize()方法:
- public String normalize(String path) {
- int n = path.length();
- char slash = this.slash;
- char altSlash = this.altSlash;
- char prev = 0;
- for (int i = 0; i < n; i++) {
- char c = path.charAt(i);
- if (c == altSlash)
- return normalize(path, n, (prev == slash) ? i - 1 : i);
- if ((c == slash) && (prev == slash) && (i > 1))
- return normalize(path, n, i - 1);
- if ((c == ':') && (i > 1))
- return normalize(path, n, 0);
- prev = c;
- }
- if (prev == slash) return normalize(path, n, n - 1);
- return path;
- }
复制代码 |