有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

文件在JAVA中路径名字符串的前缀和长度是多少?

档案。java使用一个变量作为:

private final transient int prefixLength;

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

档案。java还有一个构造函数:

public File(String pathname) {
        if (pathname == null) {
            throw new NullPointerException();
        }
        this.path = fs.normalize(pathname);
        this.prefixLength = fs.prefixLength(this.path);
    }

在这里,它是使用fs设置变量前缀长度。prefixLength()方法

变量fs在文件中定义。java as:

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,具体取决于路径名的长度或路径名的第一个字符

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


共 (2) 个答案

  1. # 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. # 2 楼答案

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

    • 1) 这是什么长度
    • 2) 它的意义是什么

    1)该长度表示文件路径的名称是否带有条。在unix文件系统中,了解

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

    2)当您试图访问此文件路径中的文件时,可能会使用“/”来考虑