Удаление строки в тексте; метод не работает - PullRequest
0 голосов
/ 02 апреля 2020

Все другие решения этой проблемы, которые я нахожу в Интернете, похоже, совсем не помогают.

У меня есть метод, который должен найти указанную строку 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;
    }

1 Ответ

0 голосов
/ 02 апреля 2020

решено: я никогда не добавлял типы данных. Последнее свойство printLine является двойным. В текстовом файле он хранится как 0. Двойник печатается как 0.0, что делает выражение if никогда не верным. Изменение текстового файла исправляет это.

...