java - 删除文本中的一行;方法不起作用
问题描述
我在网上找到的所有其他解决此问题的方法似乎都没有帮助。
我有一个方法,应该在填充的文本文件中找到特定的行。除找到的行之外的所有行都必须写入一个新的空文本文件,该文件将重命名为原始填充文件。文本文件示例如下(文本之间没有任何行,只是格式问题):
数学#学期考试#2020-01-10#0.5#0
科学#学期测试#2020-01-11#0.5#0
会计#Term Test#2020-01-12#0.5#0
信息技术#学期测试#2020-01-13#0.25#0
数学#课堂考试#2020-01-14#0.25#0
我的学校项目基本上是高中学生学术评估的经理。我们必须使用文本文件来存储数据。在这种情况下,一个主题可以有多个评估,并且评估可以具有相同的名称,但不属于同一主题。因此,一行的关键标识符是主题名称(第一个)和评估名称(第二个)的组合。这由哈希(“#”)分隔。
CheckIfPresentInFile方法读取文件并在文件中存在名称(主题和评估名称的组合)时返回布尔值 (true)。
我得到输出“已完成”,但是当我检查文本文件时,要删除(或更确切地说是删除)的行,评估从未被删除。它与文件中的文本完全相同。请帮忙。
我认为可能是 BufferedReader 或 BufferedWriter 没有正确关闭,但我没有足够的 Java 经验或知识来解决这个问题。到目前为止,我的很多代码都依赖于这种方法。
public static boolean deleteAssessment(Assessment inAssessment) {
boolean successful;
String printLine = inAssessment.getSubject() + "#" + inAssessment.getAssessmentName()
+ "#" + inAssessment.getDueDate() + "#" + inAssessment.getWeight() + "#" + inAssessment.getGoal();
String inName = inAssessment.getSubject() + "#" + inAssessment.getAssessmentName();
Subject mySub = Tools.searchSubjectArr(inAssessment.getSubject(), Tools.loadSubject());
if (CheckIfPresentInFile("Assessments.txt", inName) == true) {
try {
File inputFile = new File("Assessments.txt");
File tempFile = new File("myTempFile.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
String lineToRemove = printLine;
String currentLine;
while ((currentLine = reader.readLine()) != null) {
String trimmedLine = currentLine.trim();
if (trimmedLine.equals(lineToRemove)) {
continue;
}
writer.write(currentLine + System.getProperty("line.separator"));
}
writer.close();
reader.close();
inputFile.delete();
tempFile.renameTo(inputFile);
System.out.println("Completed");
} catch (IOException e) {
}
successful = true;
} else {
JOptionPane.showMessageDialog(null, "Warning: " + inAssessment.getAssessmentName() + " does not exist" + "\nTry again");
successful = false;
}
return successful;
}
解决方案
已解决:我从未添加过数据类型。printLine 的最后一个属性是双精度。在文本文件中,它被存储为 0。double 被打印为 0.0,使得 if 语句永远不会为真。更改文本文件可以解决此问题。
推荐阅读
- java - 如何优雅地关闭 spring-kafka 消费者应用程序
- r - 数据未在 R 闪亮中显示 DT 复杂标题
- bash - 忽略 Awk 中的颜色转义
- python - 如何在python中将列表转换为json列表?
- c++ - 对 Windows MFC 进行单元测试(特别是 CTreeCtrl)
- python - 从深度图和骨架坐标检测人体目标
- c# - 优雅处理“此浏览器不支持 WebAssembly”。
- python - 将多个数组存储在一起时出现内存不足错误
- python - matplotlib python中重叠的两个饼图标签
- sparql - SPARQL 在知识图中查找节点的所有第一邻居、第二邻居和第三邻居