为什么新的FileWriter(“abc.txt”)创建一个新文件而新文件(“abc.txt”)没有?

时间:2011-12-25 16:41:07

标签: java

new File("abc.txt")在磁盘上创建文件时,

new FileWriter("abc.txt")不会创建实际文件。在浏览源代码时,我发现new FileWriter("abc.txt")最终会创建一个像new File()

这样的文件对象

6 个答案:

答案 0 :(得分:9)

java.io.File的构造方法不会在磁盘上创建文件。它只是文件路径的抽象。写入文件时会创建该文件。

当你创建FileWriter时,它会调用FileOutputStream的构造函数来调用一系列安全检查,然后调用:

if (append) {
    openAppend(name);
} else {
    open(name);
}

调用open()会在磁盘上创建文件。

编辑:

以下是open()的定义方式:

/**
 * Opens a file, with the specified name, for writing.
 * @param name name of file to be opened
 */
private native void open(String name) throws FileNotFoundException;

答案 1 :(得分:2)

File并不总是需要代表一个实际的文件,它可能是您计划创建的内容,猜测是否存在,或者您已删除的内容。

来自java.io.File的JavaDoc:

  

文件和目录路径名的抽象表示。

  

此类的实例可能表示也可能不表示实际的文件系统对象,例如文件或目录。

为了实际创建文件,需要根据JavaDoc调用createNEwFile()

  

当且仅当具有此名称的文件尚不存在时,以原子方式创建一个由此抽象路径名命名的新空文件。

答案 2 :(得分:2)

我认为file.createNewFile()实际创建新文件..请参阅以下代码以获取detal ...

  File file = new File("D:\\tables\\test.sql");

            // if file does not exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());

答案 3 :(得分:1)

File对象只是系统中文件位置(URL)的表示。您可以在File对象上调用createNewFile()以编写我们的文件,假设该文件中尚未存在该文件。

答案 4 :(得分:0)

FileWriter在内部创建新的File对象时,这不是导致文件出现的原因。这种情况发生在代码的其他部分。 File对象只是指定文件(或目录)的标准方法,无论它是否存在。

答案 5 :(得分:0)

真的有很多原因,但是:

java.io中的许多类都使用了文件。 FileReader等... FileWriter是一个使用File的“便利”类,它使程序员的工作效率更高。有些类只需要一个指向文件位置的File对象,然后根据需要对它进行操作以支持它们的处理。其他类可能支持FileWriter,因为它只会写入文件而不是读取。它还使API更强类型。