6

Java.iO.File文档对它的构造函数说了以下的话pathname

public File(String pathname)

通过将给定的路径名​​字符串转换为抽象路径名来创建一个新的 File 实例。如果给定的字符串是空字符串,则结果是空的抽象路径名。

但是如果pathname指向一个已经存在的文件呢?

File file = new File(PATH_TO_AN_EXISTING_FILE);

上述file实例是否代表一个全新的文件(现有文件被删除?)还是代表现有文件?

4

8 回答 8

7

文档说的是它将创建一个新File 实例。这意味着它将在File类的内存中创建一个新实例。

该对象将指向您文件系统上的一个文件。但是,如果文件存在,则不会创建新文件。

于 2013-10-31T09:29:42.803 回答
4

我认为文档有点混乱:File在 Java 中创建新对象并不意味着在文件系统中创建新文件。对象只是文件和目录路径名的File抽象表示,它可能代表也可能不代表磁盘或网络存储上的真实文件。

它或多或少等同于String表示某物的地址:当你写

String str = "1600 Pennsylvania Ave NW, Washington, DC 20500";

您创建一个带有现有建筑物地址的字符串。str您创建的字符串与恰好位于该地址的白宫之间没有其他联系。

File使用现有路径名创建的文件和使用不存在路径名创建的文件之间的唯一区别是exists()前者的调用将返回true,而后者的相同调用将返回false

于 2013-10-31T09:32:41.007 回答
1

AFile不直接链接到文件系统上的实际文件。如果文件存在,它将指向该文件。如果文件不存在,则不会创建它。exist()将返回假。

于 2013-10-31T09:33:32.720 回答
0

该类java.io.File表示某个文件系统上的路径。它不直接绑定到文件。创建实例时,您没有打开文件。File

File对象只是堆上的对象。是的,它确实具有暗示该对象代表真实文件(或目录:看到歧义吗?)的字段和方法。File您可以为不存在的文件/目录创建对象:文件系统不会发生任何事情;将File创建实例。毕竟,aFile只是一个描述符。

此外,您可以创建多个File具有不同路径的对象(尤其是当一个对象是绝对路径而其他对象是来自不同父路径的相对路径时),但是在实际评估它们时它们都将指向同一个文件/目录(通过打开带有In/OutputStream, Reader/Writer; 检查exists()或创建时:createFile(), createDirectory().

于 2013-10-31T09:32:11.700 回答
0

这是一个命名非常混乱的类。

一个File对象代表一个文件路径,而不是一个实际的文件。因此,当您创建File对象时,您不会更改文件系统上的任何内容。从概念上讲,它与String.

在 java.nio 中,该类已重命名为(更直观)Path

于 2013-10-31T09:36:43.773 回答
0

文件 f=new File("C://Existing_file")

上面的行表示已经存在的文件而不是要创建的新文件。文件类实例总是指 IO 操作,也总是指已经组成的文件

于 2013-10-31T09:49:35.743 回答
0

通过创建新实例

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

这个新的文件对象将指向系统中名为ABC.txt的文件(如果存在)。如果ABC.txt文件不存在,则文件对象根本不指向任何文件。

于 2018-07-03T16:18:11.067 回答
0

当文件存储在计算机中时。与文件相关的信息也被存储(您可以通过右键单击文件在属性中检查它)。这些是关于文件的信息。

所以 File 类对象除了表示有关文件的信息之外什么都不做。

File 类对象只为您提供有关文件的信息,并且在其定义中说明了这一点。

于 2021-09-22T15:01:48.937 回答