Как получить цикл matcher.find while для записи в текстовый файл? Джава

Я использую цикл while(matcher.find()) для записи определенных подстрок в файл. Я получаю список совпадающих строк, встречающихся в файле на моей консоли System.out, но когда я пытаюсь использовать FileWriter для записи в текстовый файл, я получаю только самую последнюю строку в записанном цикле. Я искал stackru для подобных проблем (и он соответствует своему названию), я не мог найти ничего, что мне помогло. И просто чтобы уточнить, что это не работает на EDT. Кто-нибудь может объяснить, где искать проблему?

try {
    String writeThis = inputId1 + count + inputId2 + link + inputId3;
    newerFile = new FileWriter(writePath);
    //this is only writing the last line from the while(matched.find()) loop
    newerFile.write(writeThis);
    newerFile.close();
    //it prints to console just fine!  Why won't it print to a file?
    System.out.println(count + " " + show + " " + link); 
    } catch (IOException e) {
        Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);
    } finally {
        try {
            newerFile.close();
            } catch (IOException e) {
                Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);

            }
    }
}

3 ответа

Решение

Быстрая починка:

менять

newerFile = new FileWriter(writePath);

в

newerFile = new FileWriter(writePath, true);

Это использует FileWriter(String fileName, boolean append) конструктор.


Лучше исправить:

создать FileWriter за пределами while(matcher.find()) затем закройте его (или используйте как try with resources initilzation).

код будет что-то вроде:

try (FileWriter newerFile = new FileWriter(writePath)) {
   while (matcher.find()) {
      newerFile.write(matcher.group());
   }
} ...
Please check as follows:

FileWriter newerFile = new FileWriter(writePath);
while(matcher.find())
{
xxxxx
try {
    String writeThis = inputId1 + count + inputId2 + link + inputId3;

    //this is only writing the last line from the while(matched.find()) loop
    newerFile.write(writeThis);
    newerFile.flush();
    //it prints to console just fine!  Why won't it print to a file?
    System.out.println(count + " " + show + " " + link); 
    } catch (IOException e) {
        Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);
    } finally {
        try {
            newerFile.close();
            } catch (IOException e) {
                Logger.getLogger(Frame1.class.getName()).log(Level.SEVERE, null, e);

            }
    }
}
}

Вы не должны создавать экземпляр FileWriter каждая итерация цикла Вы должны оставить использование метода write() там и иници FileWriter до цикла и закрыть его после цикла.

Другие вопросы по тегам