2016-02-19 3 views
-1

У меня есть метод (PrintTree), который возвращает строку (treeString) с несколькими строками. Строка выглядит следующим образом:Проблема с PrintWriter?

html 
head 
link 
body 

Когда я распечатать его на консоль, он печатает строку правильно. Однако, когда я пытаюсь использовать printWriter, он ничего не выводит.

PrintWriter out=new PrintWriter(filePath); 
out.write(PrintTree(root)); 
out.close(); 

Что я делаю неправильно?

+0

Для чего вы используете устаревшие классы? Используйте 'Files.newBufferedWriter()'. – fge

+0

Вы получили какое-то исключение? – nnunes10

+0

Без исключения. Когда я вынимаю \ n в моем методе, который строит мою строку (помещая все в одну строку), она печатает. Тем не менее, я пытаюсь заставить все распечатать на отдельной строке. – nyklyfe

ответ

0

PrintWriter буферизуется. Таким образом, он будет только «фиксировать» записи, когда его внутренний буфер заполнен (и это специфично для реализации), или когда вы его используете .flush().

В любом случае, это 2016. Таким образом, не используйте это. Используйте Files.newBufferedWriter(), и примерочных с-ресурсов заявление:

final Path outfile = Paths.get(...); 

try (
    final Writer writer = Files.newBufferedWriter(path); 
) { 
    out.write(PrintTree(root)); 
} 

Это тем более важно, чтобы действовать таким образом, чтобы обнаружить ошибки на ранних стадиях, что, quoting the javadoc (курсив мой):

методы в этот класс никогда не бросает исключения ввода-вывода, хотя некоторые из его конструкторов могут. Клиент может узнать, произошли ли какие-либо ошибки, вызвав checkError().

И это слишком просто, слишком легко, чтобы не звонить .checkError().

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