首页 > 解决方案 > 了解在 Java 中创建新文件的具体工作原理

问题描述

我有一段代码大部分都可以工作,但我不明白为什么。这是说明问题的代码的简化版本:

String thisdir = System.getProperty("user.dir");
String newdir = thisdir + "\\src\\test\\resources\\Test.txt";

File input = new File(newdir);
FileWriter writer = new FileWriter(input);

for (int i = 0; i < 1; i++) {
    writer.write("completed");
}

for (int i = 0; i < 2; i++) {
    writer.write(System.getProperty( "line.separator" ));
    writer.write("completing");
}

String path = Paths.get(this.getClass().getResource("/Test.txt").toURI()).toFile().getPath();

代码在 \src\test\resources 目录中创建“Test.txt”。然后它在第一行写入“完成”,然后在接下来的两行中写入“完成”x2。最后,它将“路径”定义为文件的路径。

我的问题是:

我看到的教程似乎表明如果文件已经存在,Java 将不会创建新文件。但是,它并不能解释我的任何一个问题。

标签: javafile

解决方案


对于打开文件进行写入时的第一个问题(就像创建FileWriter时一样),它被清除,长度设置为 0。如果要追加,则需要打开文件进行追加。有一个带有布尔附加标志的构造函数,您可以使用它。

第二个问题getClass().getResource("/Test.txt")是指通常在目标/类或 bin 中找到的编译资源。如果您从 src/resources 中删除该文件,它将不会被构建,并且目标目录中没有文件。运行程序时在 src 中创建文件无济于事;到那时为时已晚。找不到资源,您会得到一个NullPointerException.


推荐阅读