A NullReferenceException
бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.
Например:
string str = string.Empty;
str.ToLower(); // throw null reference exception
Public Class Person {
public string Name { get; set; }
}
Person objPerson;
objPerson.Name /// throw Null refernce Exception
Тот факт, что метод PrintWriter
называется append()
, не означает, что он изменяет режим открываемого файла.
Вам также нужно открыть файл в режиме добавления:
PrintWriter pw = new PrintWriter(new FileOutputStream(
new File("persons.txt"),
true /* append = true */));
Также обратите внимание, что файл будет записан в системное кодирование по умолчанию. Это не всегда желательно и может вызвать проблемы совместимости, вы можете явно указать кодировку файла.
IMHO принятый ответ не учитывает тот факт, что намерение заключается в написании символов. (Я знаю, что тема старая, но так как при поиске той же темы я наткнулся на это сообщение, прежде чем найти рекомендуемое решение, я размещаю здесь.)
Из FileOutputStream
docs , вы используете FileOutputStream
, когда хотите печатать байты.
FileOutputStream предназначен для записи потоков необработанных байтов, таких как данные изображения. Для записи потоков символов используйте FileWriter.
blockquote>Кроме того, из
BufferedWriter
docs :Если приглашение не выводится требуется, чтобы BufferedWriter обертывал вокруг любого Writer, чьи операции write () могут быть дорогостоящими, например FileWriters и OutputStreamWriters.
blockquote>Наконец, ответ будет следующим (как упоминалось выше) в этом другом сообщении StackOverFlow ):
PrintWriter out = null; try { out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true))); out.println("the text"); }catch (IOException e) { System.err.println(e); }finally{ if(out != null){ out.close(); } }
Кроме того, с Java 7 вы можете использовать оператор try-with-resources. Окончательный блок не требуется для закрытия объявленного ресурса (-ов), поскольку он обрабатывается автоматически, а также менее подробен:
blockquote>try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) { out.println("the text"); }catch (IOException e) { System.err.println(e); }
Откройте файл в режиме добавления, как со следующим кодом:
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"), true));
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"),true));