2014-09-26 3 views
0

Почему я не могу написать большой объем данных с помощью PrintWriter?Printwriter для записи в файл

String result = acquireLengthyData(); 
PrintWriter out = new PrintWriter("D:/log.txt"); 
out.println(result); 

, где result.lenght() = 189718. Но некоторые данные отсутствовали в log.txt. Зачем? Как я могу правильно записать файл?

+0

Какая ошибка вы получаете? – Powerslave

+0

@Powerslave Я написал, что некоторые данные отсутствовали в log.txt_. Ошибок нет. –

+0

Вы уверены, что в конце отсутствуют данные в конце, и это не значит, что 'result' формируется неправильно? – Yann

ответ

3
Class PrintWriter 

В отличие от класса PrintStream, если автоматическая промывка включена, это будет сделано только тогда, когда один из методов Println, PRINTF или формат вызывается, а не всякий раз, когда символ новой строки случается выход. Эти методы используют собственное понятие разделителя строк, а не символ новой строки.

Так что вам нужно включить опцию automatic flush при создании PrintWriter:

PrintWriter out = new PrintWriter(new FileWriter("D:/log.txt"),true); 
out.println(result); 
// finally{out.close();} with a null check, if required. 

Примечание: Включение автоматической промывки заставит содержимое в буфере записывается в выходной поток, даже если буфер не достиг своей емкости для хранения содержимого.

5

Необходимо выполнить промывку после записи, это очищает поток. PrintWriter#flush сделал бы это.

Сбрасывает поток. Если поток сохранил любые символы из различных методов write() в буфере, немедленно сообщите их их предполагаемому назначению.

PrintWriter#flush - Java doc

фрагмент кода -

PrintWriter out = new PrintWriter("D:/log.txt"); 
out.println(result); 
out.flush(); 
out.close(); 

И не забудьте закрыть писатель после использования.

+0

Не могли бы вы предоставить код целиком? –

+0

Wait - это 'flush()' строго требуется даже при вызове 'close()'? – Deltharis

+0

Это волшебство. Что делает флеш? –

Смежные вопросы