Как считать в файл все обработанные слова?

  • 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();
→ Ссылка