Новая строка при записи в файл

Я перешел по ссылке по этой ссылке, и я придумал код ниже

     try {
        File file = new File(
                "C:/dataset.txt");

        // if file doesnt exists, then create it
        if (!file.exists()) {
            file.createNewFile();
        }

        FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
        BufferedWriter bw = new BufferedWriter(fw);

        List<Integer> data = generateData(args);

        // one per line
        for (final int i : data) {
            bw.write(i);
            bw.newLine(); // Here it throws NullPointerException
        }
        bw.close();
    } catch (IOException e) {
        System.out.print(e);
    }

ПРИМЕЧАНИЕ. Даже если я перемещаю bw.newLine(); перед for петлей, он выдает NullPointerException.

Изображение

введите здесь описание изображения

Я что-нибудь упускаю?


person Junaid    schedule 07.10.2015    source источник
comment
Вы уверены, что это вызывает исключение NullPointerException?   -  person orique    schedule 07.10.2015
comment
Да, я прикрепил картинку. См. Обновленный вопрос.   -  person Junaid    schedule 07.10.2015
comment
Вы уверены, что именно bw.newLine(); вызывает исключение?   -  person jaredk    schedule 07.10.2015
comment
newLine будет write то, что возвращает System.getProperty("line.separator"), плюс попытается получить его длину. Если такого системного свойства не существует (явно выполнив clearProperty?), Это вызовет NPE.   -  person orique    schedule 07.10.2015
comment
@orique System.getProperty("line.separator") возвращает null   -  person Junaid    schedule 07.10.2015
comment
У меня есть подозрение, что что-то в вашей настройке неверно или неуместно, если System.getProperty имеет значение null. Это также может быть причиной вашей другой ошибки.   -  person Sh4d0wsPlyr    schedule 07.10.2015


Ответы (1)


Чтобы добавить разделитель строк, вы можете использовать это.

    //to add a new line after each value added to File
    String newLine = System.getProperty("line.separator"); 

а затем назовите это так:

    bw.write(newLine);

РЕДАКТИРОВАТЬ: поскольку вы не можете использовать System.getProperty с BufferWriter, я бы предложил следующий код:

private FileOutputStream fOut;
private OutputStreamWriter writer;
fOut = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
writer = new OutputStreamWriter(fOut);
writer.append(.... whatever you wish to append ...);
writer.append(separator);
writer.flush();
fOut.close();

Надеюсь, это поможет!

person Shrey    schedule 07.10.2015
comment
System.getProperty("line.separator") возвращает null. - person Junaid; 07.10.2015
comment
Реализация write делает .length() для параметра, поэтому она выдаст NPE. Это системное свойство не должно быть нулевым ... - person orique; 07.10.2015
comment
Пожалуйста, посмотрите отредактированную часть! Я обновил код на основе того, что сказал @orique: D - person Shrey; 07.10.2015