当前位置: 首页 > 知识库问答 >
问题:

为什么新文件(文件父,字符串子名称)表现不明显?

刘和正
2023-03-14

我被堆叠了一段时间,有以下行为,如果我创建这样的文件:

new File("");

然后它将指向项目工作目录,在我的例子中是C:/project/。如果创建这样的文件:

new File("image");

然后它将是相对于项目目录的,在我的例子中是C:/project/image/。一切正常,但如果我使用newfile(file parent,String childName)构造函数创建文件,如下所示:

new File(new File(""), "image");

然后它将指向C:/Image/,i从根目录开始。我发现它是记录在案的行为:

如果parent是空的抽象路径名,则通过将child转换为抽象路径名并根据依赖于系统的默认目录解析结果来创建新的文件实例

但是为什么呢?有什么原因吗?还是“仅仅因为”?为什么如果我将指向当前目录的新文件(“”)作为父目录,我将以根目录作为父目录接收子目录?

共有1个答案

魏英勋
2023-03-14

源代码显示了存在差异的原因:

/**
 * The FileSystem object representing the platform's local file system.
 */
private static final FileSystem fs = DefaultFileSystem.getFileSystem();

// Snip.

public File(File parent, String child) {
    if (child == null) {
        throw new NullPointerException();
    }
    if (parent != null) {
        if (parent.path.equals("")) {
            this.path = fs.resolve(fs.getDefaultParent(),
                                   fs.normalize(child));
        } else {
            this.path = fs.resolve(parent.path,
                                   fs.normalize(child));
        }
    } else {
        this.path = fs.normalize(child);
    }
    this.prefixLength = fs.prefixLength(this.path);
}

vs.

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

也就是说,如果您传递new File(")作为参数,则在解析路径时将考虑FileSystem的默认父参数。

所有的方法FileSystem.get默认父母FileSystem.resolveFileSystem.normalize都是抽象的,所以具体的行为不是立即明显的;然而,这不是不合理的假设不同的代码路径将导致不同的行为。

 类似资料:
  • 问题内容: 我打算在不久的将来制作一组文件,而组织它的最佳方法是有一个列表,该列表将位于文件的最顶部,之后将要处理大量的代码。该列表控制什么以及如何操作。我只想写一次上述列表,并且该列表是以下格式的文件夹和文件名的列表: 如您所见,它们是相同的(有点)。文件名末尾是文件夹名,但是导入XXX并不需要导入XXX.py,因此我看不到这会引起问题。 我面临的问题是使用这种方法导入… 因此,对于我进行的每个

  • 我有以下清单: 是否有一种快速/直接的方法将上述列表拆分为以下子列表: 在我看来,我将把条件看作是父文件夹和文件名的一部分。但是,我希望避免使用循环。 谢谢

  • 问题内容: 我一直在寻找一个命令,该命令将从当前目录返回文件名中包含字符串的文件。我已经看到和命令可以找到以某些内容开头或结尾的文件。 如何返回文件名中包含字符串的文件列表? 例如,if 是当前目录中的文件。 如何返回此文件和其他包含字符串的文件?使用诸如 问题答案: 用途: 它将在当前目录中找到所有包含“字符串”的文件(如果要递归,则删除),并将其打印在屏幕上。 如果要避免文件包含“:”,则可以

  • 问题内容: 我正在使用node + express,我只是想知道如何将任何文件导入为字符串。可以说我有一个txt文件,我想要的只是将其加载到这样的变量中。 我反对 问题答案: 如果是针对(少数)特定扩展名的,则可以添加自己的处理程序: 否则,您可以与:

  • 我需要在android中以字符串的形式加载一个xml文件,以便将其加载到TBXML xml解析器库并对其进行解析。我现在必须以字符串形式读取文件的实现需要大约2秒,即使对于一些KBs的非常小的xml文件也是如此。在Java/Android中,有没有已知的快速方法可以将文件读取为字符串? 这是我现在拥有的代码:

  • 问题内容: 经过测试,我发现linux允许文件名中的任何字符(和和null()除外)。那么我不应该以什么顺序输入文件名呢?我听说领导可能会混淆某些命令行程序,这对我来说并不重要,但是如果其他人决定收集一堆文件并使用某些GNU程序对其进行过滤,则可能会打扰其他人。 我建议删除前导空格和尾随空格,而我计划这样做的原因仅是因为用户通常并不打算拥有前导/尾随空格。 可能会有什么问题序列,我应该考虑不允许什