gpt4 book ai didi

java - 了解在 Java 中创建新文件的确切方式

转载 作者:行者123 更新时间:2023-12-04 14:47:35 25 4
gpt4 key购买 nike

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

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。最后,它将“路径”定义为文件的路径。

我的问题是:

  • 假设,在\src\test\resources 目录中,我制作了一个 Test.txt 文件并向其中添加了一些随机文本。然后,在我运行这段代码后,随机文本消失了,取而代之的是“已完成”和“正在完成”x2。为什么?我没有使用任何方法,例如 trim 来删除文本。我的第一个猜测是 Java 只是简单地覆盖文本(而不是删除所有内容并从一个空白文件开始),但是当我测试它不起作用时 - 如果这个假设是正确的,那么如果我用 i < 1 重新运行代码在写“completing”的for循环中,该文件应该仍然包含两行“completing”,但它没有。
  • 相反,如果我从\src\test\resources 目录中没有文件开始,那么定义 path 的行将返回 NullPointerException。为什么?较早的代码应该在那个文件夹中创建了“Test.txt”(当然在我运行代码之后它就在那里),并且应该检测到该文件。如果我从目录中的 Test.txt 文件开始,那么代码会工作并且 path 也会返回预期的输出。

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

最佳答案

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

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

关于java - 了解在 Java 中创建新文件的确切方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69733929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com