【发布时间】:2021-10-26 06:28:40
【问题描述】:
我创建了一个 I/O 类来读取一些文本并将其附加到文件中。
我以为它已经写好了,但由于某些原因它没有显示在文件中 - 尽管程序可以识别它。
文件TestResult.csv 位于程序文件夹内的src/main/resources 文件夹中。
我从关于 HowToDoInJava 的教程中学会了如何打开和阅读它:Read a file from the ‘resources’ folder。
我的代码
前几行代码与网站中的示例非常相似。
import java.io.*;
import java.nio.file.Files;
import java.io.FileWriter;
public class ReadResourceFileDemo {
public static void main(String[] args) throws IOException {
//open file
ClassLoader classLoader = IOLab.class.getClassLoader();
File file = new File(classLoader.getResource("TestResult.csv").getFile());
//append
try (FileWriter fw=new FileWriter(file, true)) {
fw.append("\nJulie,Brown,100,A");
String content = new String(Files.readAllBytes(file.toPath()));
System.out.println(content);
}
}
}
我在TestResult.csv 得到了什么
Alex,Smith,99,A
Jolene,Schmidt,100,A
Mackinzie,Jensen,86,B
目标是将字符串附加到TestResult.csv。
在我运行第一次之后,结果是:
Alex,Smith,99,A
Jolene,Schmidt,100,A
Mackinzie,Jensen,86,B
然后我再次运行第二次并得到:
"C:\Program Files\Java\jdk-16.0.2\bin\java.exe" "-javaagent:C:\Program
Files\JetBrains\IntelliJ IDEA 2021.2.1\lib\idea_rt.jar=56365:C:\Program
Files\JetBrains\IntelliJ IDEA 2021.2.1\bin" -Dfile.encoding=UTF-8 -classpath
C:\Users\tuant\IdeaProjects\untitled\target\classes edu.sdccd.cisc191.ReadResourceFileDemo
Alex,Smith,99,A
Jolene,Schmidt,100,A
Mackinzie,Jensen,86,B
Julie,Brown,100,A
Process finished with exit code 0
问题
这意味着程序第一次跳过了追加,或者它跳过了但由于某种原因没有显示在文件中。
当我打开文件 TestResult.csv 时,它只有前 3 行。
但是,手动附加的第 4 行为
Julie,Brown,100,A 没有出现。
非常感谢您的帮助!
【问题讨论】:
-
很奇怪,你正在读取文件,而你仍然打开它进行写入。你应该移动这个“String content = new String(Files.readAllBytes(file.toPath()));”在 try 语句之外。
-
写入通过
ClassLoader.getResource()找到的文件是一个非常糟糕的主意。这些应该被视为只读资源,如果您从 jar 文件运行,它们确实是。很容易发生 IDE 的自动后台构建会覆盖该文件和/或您实际上并未打开您认为正在打开的路径! -
@Tobi:您的教授可能不关心这种情况下的潜在问题。如果是这种情况,那么暂时忽略这个问题。请注意,如果您在“真实代码”中使用这种特定模式,它可能会产生一些绊脚石。
-
@JoachimSauer,这是处理“家庭作业”中的代码挑战的好建议。它鼓励所有学生和像 Tobi 这样的新贡献者诚实并分享背景(例如家庭作业、教授、课程等),以便从专业人士和以前的学生的情境建议和实践经验中受益?? ??️
-
@hc_dev:谢谢。对我来说,这只是对 SO 的一般开放性的扩展:对技术问题的奇怪约束和限制可能来自任何地方,即使在专业软件开发中,我们有时也会遇到周围环境,使“最佳和正确”的解决方案由于某种原因不可行。这就是这份工作的现实(我认为还有许多其他工作)。因此,如果这些存在(因为它是家庭作业,或者某些利益相关者坚持使用 XML 来做某事),那么如果它们被清晰地传达出来就会有所帮助。