Как получить цикл 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
до цикла и закрыть его после цикла.