创建File对象是创建物理文件还是触摸JVM外部的任何内容?

use*_*818 5 java jvm file

Java类File有4个构造函数:

  • File(File parent, String child)
    从父抽象路径名和子路径名字符串创建新的File实例.

  • File(String pathname)
    通过将给定的路径名​​字符串转换为抽象路径名来创建新的File实例.

  • File(String parent, String child)
    从父路径名字符串和子路径名字符串创建新的File实例.

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

当我做:

File f=new File("myfile.txt");
Run Code Online (Sandbox Code Playgroud)

是否创建了磁盘上的物理文件?或者JVM是否调用OS或者仅在JVM中创建一个对象?

Jon*_*eet 6

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

施工人员问底层的文件系统表示进行某种形式的规范化操作,如果有可能的,但是这并不需要该文件存在.作为规范化的示例,请考虑在Windows上运行此代码:

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

这打印

c:\a\b\c\d.txt
Run Code Online (Sandbox Code Playgroud)

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