new File("abc.txt")
在磁盘上创建文件时, new FileWriter("abc.txt")
不会创建实际文件。在浏览源代码时,我发现new FileWriter("abc.txt")
最终会创建一个像new File()
答案 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更强类型。