【问题标题】:What is a pathname string's prefix and its length in JAVA?什么是 JAVA 中路径名字符串的前缀及其长度?
【发布时间】:2017-01-09 02:48:31
【问题描述】:

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);
    }

这里是使用 fs.prefixLength() 方法设置变量 prefixLength。

变量 fs 在 File.java 中定义为:

private static final FileSystem fs = DefaultFileSystem.getFileSystem();

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

public int prefixLength(String pathname) {
        if (pathname.length() == 0) return 0;
        return (pathname.charAt(0) == '/') ? 1 : 0;
    }

表示此方法将仅返回 0 或 1,具体取决于路径名的长度或路径名的第一个字符。

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

【问题讨论】:

    标签: java file filesystems pathname


    【解决方案1】:

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

    c:\quick\brown\fox.java
    ^^^
    

    以上,前缀为c:\

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

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

    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 */
    }
    

    【讨论】:

      【解决方案2】:

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

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

      1)此长度表示文件路径是否具有带横杠的名称。在 unix 文件系统中,重要的是要知道......

      when "/user/some_folder" return 1
      when "user/some_folder" return 0
      when "" return 0
      

      2) 可能在您尝试访问此文件路径中的文件以考虑“/”时使用它..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-03
        • 2011-01-28
        • 1970-01-01
        • 2012-07-09
        • 2015-09-10
        • 1970-01-01
        相关资源
        最近更新 更多