Как считать в файл все обработанные слова?
- Input: GIN rabic ДЯТЕЛ т6zм ВИМ 5 КРОЛИК
- Output: КРОЛИК
Выводит в файл с консоли только последнее слово, как сделать, что выводил все обработанные слова, т.е.:
GIN
ДЯТЕЛ
ВИМ
КРОЛИК
Как их сохранять? Нужна помощь. Сохраняет только последнее.
BufferedReader in = new BufferedReader(new FileReader("input.txt"));
String line = in.readLine();
Matcher m = Pattern.compile("\\b[A-ZА-ЯЁ]{2,6}\\b").matcher(line);
while (m.find()) {
System.out.println(m.group());
{
try {
File file = new File("output.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(m.group());
bw.close();
} catch (IOException e) {
System.out.println("Error: " + e);
e.printStackTrace();
}
}
}
Ответы (1 шт):
Автор решения: NyashMyash99
→ Ссылка
FileWriter после открытия не добавляет строки в файл, а начинает писать с нуля, поэтому после его закрытия и повторного открытия запись начинается на "чистый" файл, а не с изменениями.
Достаточно вынести Writer за цикл и не закрывать его до конца работы:
// Открываем Reader файла input.
BufferedReader in = new BufferedReader(new FileReader("input.txt"));
// Открываем Writer файла output.
BufferedWriter out = new BufferedWriter(new FileWriter("output.txt"));
// Обрабатываем строчку через Mather.
Matcher matcher = Pattern.compile("\\b[A-ZА-ЯЁ]{2,6}\\b")
.matcher(in.readLine());
while(matcher.find())
// Записываем в output файл группы, разделяя переносами на новую строчку.
out.write(matcher.group() + "\n");
// Закрываем BufferedWriter.
out.close();