首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么新文件(“abc.txt”)会创建一个新文件,而新文件(“abc.txt”)不会?

为什么新文件(“abc.txt”)会创建一个新文件,而新文件(“abc.txt”)不会?
EN

Stack Overflow用户
提问于 2011-12-26 00:41:07
回答 6查看 19.9K关注 0票数 2

new FileWriter("abc.txt")在磁盘上创建文件时,new File("abc.txt")不会创建实际的文件。在浏览源代码时,我发现new FileWriter("abc.txt")最终创建了一个类似于new File()的文件对象

EN

回答 6

Stack Overflow用户

发布于 2011-12-26 00:47:28

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

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

代码语言:javascript
运行
复制
if (append) {
    openAppend(name);
} else {
    open(name);
}

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

编辑:

下面是open()的定义:

代码语言:javascript
运行
复制
/**
 * 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;
票数 10
EN

Stack Overflow用户

发布于 2013-10-25 21:52:37

我认为file.createNewFile()在实际中创建了新文件。请参阅下面的detal代码。

代码语言:javascript
运行
复制
  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
EN

Stack Overflow用户

发布于 2011-12-26 00:48:46

File并不总是需要表示实际的文件,它可以是您计划创建的文件,可以是猜测存在的文件,也可以是您已经删除的文件。

java.io.File的JavaDoc

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

此类的

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

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

当且仅当具有此抽象路径名的文件尚不存在时,

才以原子方式创建一个以此抽象路径名命名的新空文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8630484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档