Вопрос

Пожалуйста, просмотрите код ниже:

// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);

// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

В чем разница между этими двумя методами?

Когда нам следует использовать PrintWriter вместо BufferedWriter?

Это было полезно?

Решение

Ссылка на API для Буферизованный писатель и PrintWriter детализируйте различия.

Основная причина использования PrintWriter — получение доступа к методам printXXX, таким как println().По сути, вы можете использовать PrintWriter для записи в файл точно так же, как если бы вы использовали System.out для записи на консоль.

BufferedWriter — это эффективный способ записи в файл (или что-либо еще), поскольку он буферизует символы в памяти Java перед (вероятно, в зависимости от реализации) переходом на C для записи в файл.

Не существует такого понятия, как «PrintReader»;самое близкое, что вы получите, это, вероятно, java.util.Сканер.

Другие советы

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

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

Я не уверен, почему аспекты «дополнительные возможности форматирования» и «не проглатывать исключения» объединены в один и тот же класс — форматирование очевидно полезно во многих местах, где вы не хотят, чтобы исключения были проглочены.Было бы здорово увидеть BufferedWriter в какой-то момент получить те же способности...

Как сказано в ответе TofuBeer, у обоих есть свои особенности.Чтобы в полной мере воспользоваться преимуществами PrintWriter (или любого другого средства записи), а также использовать буферизованную запись, вы можете обернуть BufferedWriter необходимым, например:

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));

PrintWriter просто предоставляет методы печати для любого Writer в символьном режиме.

BufferedWriter более эффективен, чем , согласно его буферизованным методам.И он поставляется с методом newLine(), в зависимости от вашей системной платформы, для правильного управления текстовыми файлами.

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

PrintReader нет, вам придется выбрать другую реализацию Reader в соответствии с форматом ввода.

PrintWriter является наиболее усовершенствованным средством записи для записи символьных данных в файл.

Основное преимущество PrintWriter перед FileWriter и BufferedWriter:

  1. PrintWriter может взаимодействовать напрямую с файлом, а также через какой-либо объект Writer.

PrintWriter printwriter = new PrintWriter("blah.txt");

(или)

FileWriter filewriter = new FileWriter("blah.txt");
PrintWriter printwiter = new PrintWriter(filewriter);
  1. Мы можем записывать данные примитива любого типа непосредственно в файл (поскольку у нас есть дополнительные перегруженные версии методов PrintWriter, то есть print() и println()).

    printwriter.print(65); //65
    bufferedwriter.write(65); //A
    printwriter.println(true); //true

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

Примечание:Текстовое содержимое в блоках кода автоматически переносится по словам.

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));

буферизует вывод PrintWriter в файл.Без буферизации каждый вызов метода print() приводил бы к преобразованию символов в байты, которые затем немедленно записывались бы в файл, что может быть очень неэффективно.

BufferedWriter — записывает текст в выходной поток символов, буферизуя символы из потока символов.PrintWriter — печатает форматированные представления объектов в поток вывода текста.

Я думаю, что причина использования PrintWriter уже упомянута выше, но одна из важных причин заключается в том, что вы передаете файловый объект непосредственно конструктору PrintWriter, что упрощает его использование.

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top