Все другие решения этой проблемы, которые я нахожу в Интернете, похоже, совсем не помогают.
У меня есть метод, который должен найти указанную строку c в заполненном текстовом файле. Все, кроме найденной строки, должны быть записаны в новый пустой текстовый файл, который будет переименован в исходный заполненный файл. Пример текстового файла выглядит следующим образом (между текстом нет строк, есть проблема с форматированием):
Математика # Термин Test # 2020-01-10 # 0.5 # 0
Science # Term Test # 2020-01-11 # 0.5 # 0
Accounting # Term Test # 2020-01-12 # 0.5 # 0
Информационные технологии # Term Test # 2020- 01-13 # 0.25 # 0
Тест по математике # Class # 2020-01-14 # 0.25 # 0
Мой проект для школы, в основном, менеджер по академическим вопросам c оценки для высоких школьники. Мы должны использовать текстовые файлы, чтобы хранить данные. В этом случае у субъекта может быть несколько оценок, и оценки могут иметь одно и то же имя, но не принадлежать одному и тому же предмету. Таким образом, ключевым идентификатором строки является сочетание имени субъекта (1-е) и имени оценки (2-е). Это разделено ха sh ("#").
Метод 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;
}