повторение строк с циклом в java

#java #while-loop

#java #цикл while

Вопрос:

Прежде всего, я должен сказать, что я прочитал все предыдущие ответы, связанные с этой темой, и ни один из них не смог помочь мне с проблемой, с которой я сталкиваюсь прямо сейчас.

Я создал метод, который считывает все строки файла, используя цикл while, затем останавливается, как только находит первую строку, содержащую определенную строку. Что я изначально хотел сделать, так это заменить строку из определенного файла другой строкой, и я попытался создать метод самостоятельно.

Итак, вот мой код на данный момент:

      bw = new BufferedWriter(new FileWriter(tmpDirectory "\" al.get(c),true));
     br = new BufferedReader(new FileReader(tmpDirectory "\" al.get(c)));
     String textToSearch = "00";
     String textToReplace = "01";

            String line = null;
            while((line = br.readLine()) != null) {
                if(line.contains(textToSearch)) {
                    bw.write(textToReplace);
                    bw.flush();
                    bw.close();
                    br.close();
                    break;
                } 
            }
  

Предполагается, что код найдет строку, содержащую строку textToSearch , и заменит ее на строку textToReplace , и когда он это сделает, цикл остановится. Проблема в том, что цикл останавливается, но файл не изменяется.
Что не так в моем коде?

Комментарии:

1. О, неважно, я не видел вашу новую правку. Спасибо 🙂

2. Извините, я забыл это указать. Я должен добавить, что это не создает никаких исключений.

3.Я протестировал это на своем компьютере, и это работает нормально. Учитывая входные данные, подобные этому: aajdfh ajsdf 00 , они должным образом изменяются на это: aajdfh ajsdf 0001 (Пробелы — это новые строки)

4. ДА. Я обнаружил, что у меня проблема с кодификацией. Java, похоже, не распознает некоторые акценты из испанского языка, например: vualà , java читает это как vual� . Вот почему это не работает

5. @Sebastian96: Чтобы исправить это, используйте InputStreamReader вместо FileReader . FileReader Не позволяет вам указывать кодировку символов.

Ответ №1:

Как сказал Грег, замените FileReader на InputStreamReader и попробуйте указать свой родной язык в качестве кодировки в конструкторе.

Ответ №2:

Если у вас небольшой файл и Java 7, вы могли бы использовать nio для чтения файла в строки напрямую

Кроме того, если цикл останавливается, а это не является намерением, просто удалите разрыв

 List<String> smallFilesLines =  Files.readAllLines(tmpDirectory "\" al.get(c), StandardCharsets.UTF_8);  

for (String oneLine : smallFilesLines) {
    if(oneLine.contains(textToSearch)){
        bw.write(textToReplace);
        bw.flush();
        bw.close();
        break;
    }
}