File.java将变量用作:
private final transient int prefixLength;并说,这是“抽象路径名的前缀”。
File.java还具有如下构造函数:
public File(String pathname) {
if (pathname == null) {
throw new NullPointerException();
}
this.path = fs.normalize(pathname);
this.prefixLength = fs.prefixLength(this.path);
}这里,它使用prefixLength ()方法设置变量fs.prefixLength。
变量fs在File.java中定义为:
private static final FileSystem fs = DefaultFileSystem.getFileSystem();方法getFileSystem()的DefaultFileSystem类返回对象的UnixFileSystem。因此,方法fs.prefixLength()实际上调用了UnixFileSystem的prefixLength()方法。prefixLength()方法的UnixFileSystem实现为:
public int prefixLength(String pathname) {
if (pathname.length() == 0) return 0;
return (pathname.charAt(0) == '/') ? 1 : 0;
}意味着此方法将只返回0或1,这取决于路径名的长度或路径名的第一个字符。
我的疑问是:它是什么类型的长度,它的意义是什么?
发布于 2016-09-01 09:48:26
prefixLength背后的思想是将文件名中指明路径根位置的部分与文件名的其余部分分开处理:
c:\quick\brown\fox.java
^^^上面的前缀是c:\。
UNIX实现非常简单,因为只有两个初始位置是可能的-根/和当前目录(没有前缀)。
Windows实现支持\\、c:、c:\和\,如下所示:
public int prefixLength(String path) {
char slash = this.slash;
int n = path.length();
if (n == 0) return 0;
char c0 = path.charAt(0);
char c1 = (n > 1) ? path.charAt(1) : 0;
if (c0 == slash) {
if (c1 == slash) return 2; /* Absolute UNC pathname "\\\\foo" */
return 1; /* Drive-relative "\\foo" */
}
if (isLetter(c0) && (c1 == ':')) {
if ((n > 2) && (path.charAt(2) == slash))
return 3; /* Absolute local pathname "z:\\foo" */
return 2; /* Directory-relative "z:foo" */
}
return 0; /* Completely relative */
}发布于 2016-09-01 09:49:47
你的问题还不清楚,让我们试着澄清:
1)这个长度意味着如果filepath的名称与该条是否相同。在unix文件系统中,重要的是要知道.
when "/user/some_folder" return 1
when "user/some_folder" return 0
when "" return 02)当您试图访问该文件路径中的文件以考虑"/“时,可能会使用它。
https://stackoverflow.com/questions/39267785
复制相似问题