Запись в файл CSV удаляет существующие данные, как я могу это исправить? [Дубликат]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
37
задан javanna 8 December 2011 в 22:14
поделиться

4 ответа

Тот факт, что метод PrintWriter называется append(), не означает, что он изменяет режим открываемого файла.

Вам также нужно открыть файл в режиме добавления:

PrintWriter pw = new PrintWriter(new FileOutputStream(
    new File("persons.txt"), 
    true /* append = true */)); 

Также обратите внимание, что файл будет записан в системное кодирование по умолчанию. Это не всегда желательно и может вызвать проблемы совместимости, вы можете явно указать кодировку файла.

75
ответ дан axtavt 31 August 2018 в 17:53
поделиться

IMHO принятый ответ не учитывает тот факт, что намерение заключается в написании символов. (Я знаю, что тема старая, но так как при поиске той же темы я наткнулся на это сообщение, прежде чем найти рекомендуемое решение, я размещаю здесь.)

Из FileOutputStream docs , вы используете FileOutputStream, когда хотите печатать байты.

FileOutputStream предназначен для записи потоков необработанных байтов, таких как данные изображения. Для записи потоков символов используйте FileWriter.

Кроме того, из BufferedWriter docs :

Если приглашение не выводится требуется, чтобы BufferedWriter обертывал вокруг любого Writer, чьи операции write () могут быть дорогостоящими, например FileWriters и OutputStreamWriters.

Наконец, ответ будет следующим (как упоминалось выше) в этом другом сообщении 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. Окончательный блок не требуется для закрытия объявленного ресурса (-ов), поскольку он обрабатывается автоматически, а также менее подробен:

try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
    out.println("the text");
}catch (IOException e) {
    System.err.println(e);
}
4
ответ дан Community 31 August 2018 в 17:53
поделиться

Откройте файл в режиме добавления, как со следующим кодом:

 PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"), true)); 
10
ответ дан kiamlaluno 31 August 2018 в 17:53
поделиться
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"),true));

true - флаг добавления. См. Документацию .

16
ответ дан Stephan 31 August 2018 в 17:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: