#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;
}
}