首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JAVA中,路径名字符串的前缀及其长度是什么?

在JAVA中,路径名字符串的前缀及其长度是什么?
EN

Stack Overflow用户
提问于 2016-09-01 09:30:27
回答 2查看 1.6K关注 0票数 2

File.java将变量用作:

代码语言:javascript
复制
private final transient int prefixLength;

并说,这是“抽象路径名的前缀”。

File.java还具有如下构造函数:

代码语言:javascript
复制
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中定义为:

代码语言:javascript
复制
private static final FileSystem fs = DefaultFileSystem.getFileSystem();

方法getFileSystem()的DefaultFileSystem类返回对象的UnixFileSystem。因此,方法fs.prefixLength()实际上调用了UnixFileSystem的prefixLength()方法。prefixLength()方法的UnixFileSystem实现为:

代码语言:javascript
复制
public int prefixLength(String pathname) {
        if (pathname.length() == 0) return 0;
        return (pathname.charAt(0) == '/') ? 1 : 0;
    }

意味着此方法将只返回0或1,这取决于路径名的长度或路径名的第一个字符。

我的疑问是:它是什么类型的长度,它的意义是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-01 09:48:26

prefixLength背后的思想是将文件名中指明路径根位置的部分与文件名的其余部分分开处理:

代码语言:javascript
复制
c:\quick\brown\fox.java
^^^

上面的前缀是c:\

UNIX实现非常简单,因为只有两个初始位置是可能的-根/和当前目录(没有前缀)。

Windows实现支持\\c:c:\\,如下所示:

代码语言:javascript
复制
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 */
}
票数 3
EN

Stack Overflow用户

发布于 2016-09-01 09:49:47

你的问题还不清楚,让我们试着澄清:

  • 1)它的长度是什么类型?
  • 2)它的意义是什么?

1)这个长度意味着如果filepath的名称与该条是否相同。在unix文件系统中,重要的是要知道.

代码语言:javascript
复制
when "/user/some_folder" return 1
when "user/some_folder" return 0
when "" return 0

2)当您试图访问该文件路径中的文件以考虑"/“时,可能会使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39267785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档