java - 创建一个 File 对象会创建一个物理文件还是触及 JVM 之外的任何东西?

标签 java file jvm

Java 类 File 有 4 个构造函数:

  • 文件(文件父,字符串子)
    从父抽象路径名创建一个新的 File 实例,并且 子路径名字符串。

  • 文件(字符串路径名)
    通过转换给定的路径名​​字符串创建一个新的 File 实例 进入抽象路径名。

  • 文件(字符串父,字符串子)
    从父路径名字符串和一个 子路径名字符串。

  • 文件(URI uri) 通过将给定文件:URI 转换为来创建一个新的 File 实例 抽象路径名。

当我这样做时:

File f=new File("myfile.txt");

是否在磁盘上创建了一个物理文件?或者 JVM 是否调用操作系统,或者这是否只在 JVM 内部创建一个对象?

最佳答案

不,创建一个新的 File 对象并不在文件系统上创建一个文件。特别是,您可以创建引用不存在的路径(甚至是 Windows 上的驱动器)的 File 对象。

构造函数确实要求底层文件系统表示在可能的情况下执行某种规范化操作,但这要求文件存在。作为规范化的示例,考虑在 Windows 上运行的这段代码:

File f = new File("c:\\a/b\\c/d.txt");
System.out.println(f);

这打印

c:\a\b\c\d.txt

显示正斜杠已标准化为反斜杠 - 但 a、b 和 c 目录实际上并不存在。我相信规范化更多地与操作系统命名方案有关,而不是任何实际资源 - 我不相信它甚至在磁盘上查看文件是否存在。

关于java - 创建一个 File 对象会创建一个物理文件还是触及 JVM 之外的任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7279845/

相关文章:

java - Java Web 应用程序中的内存泄漏

java - SAT4J 求解器的输入 CNF

java - 返回尝试资源。这是 JVM 的正确行为吗?

java - 为什么引用类型存储在堆中

java - Pig UDF Maxmind GeoIP 数据库数据文件加载问题

java - 在 Intellij 中,可以从一个选项卡组切换到另一个选项卡组的键盘快捷键的名称是什么?

使用 Swift 读取文本文件的 Pythonic 方式

python - 如何使用python计算文本文件中的总行数

python - 如何遍历目录中的文件?

java - 为什么 ant 不能运行 Main 而 JVM 可以