PrintWriter против FileWriter в Java - PullRequest
       65

PrintWriter против FileWriter в Java

33 голосов
/ 23 апреля 2011

PrintWriter и FileWriter в Java одинаковы и независимо от того, какой из них использовать? До сих пор я использовал оба, потому что их результаты одинаковы. Есть ли особые случаи, когда имеет смысл отдавать предпочтение одному другому?

public static void main(String[] args) {

    File fpw = new File("printwriter.txt");
    File fwp = new File("filewriter.txt");
    try {
        PrintWriter pw = new PrintWriter(fpw);
        FileWriter fw = new FileWriter(fwp);
        pw.write("printwriter text\r\n");
        fw.write("filewriter text\r\n");
        pw.close();
        fw.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

Ответы [ 7 ]

26 голосов
/ 23 апреля 2011

Согласно coderanch.com, если мы объединяем ответы, мы получаем:

FileWriter - это символьное представление IO.Это означает, что его можно использовать для написания символов.Внутренне FileWriter будет использовать набор символов по умолчанию базовой ОС, преобразовывать символы в байты и записывать их на диск.

PrintWriter & FileWriter.

Сходства

  1. Оба расширены от Writer.
  2. Оба являются классами представления символов, это означает, что они работают с символами и преобразуют их в байты, используя кодировку по умолчанию.

Отличия

  1. FileWriter генерирует IOException в случае любого сбоя ввода-вывода, это проверенное исключение.
  2. Ни один из методов PrintWriter не генерирует IOException, вместо этого они устанавливают логический флаг, который можно получить с помощью checkError ().
  3. PrintWriter имеет дополнительный конструктор, который вы можете использовать для включения автоматической очистки при вызове определенных методов.В FileWriter такой опции не существует.
  4. При записи в файлы FileWriter имеет необязательный конструктор, который позволяет добавлять его в существующий файл при вызове метода write ().

Разница между PrintStream и OutputStream: аналогично объяснению выше, просто замените символ байтом.

PrintWriter имеет следующие методы:

close()
flush()
format()
printf()
print()
println()
write()

и конструкторы:

File (as of Java 5)
String (as of Java 5)
OutputStream
Writer

, а FileWriter имеет следующие методы:

close()
flush()
write()

и конструкторыявляются:

File
String 

Ссылка: http://www.coderanch.com/t/418148/java-programmer-SCJP/certification/Information-PrintWriter-FileWriter

9 голосов
/ 23 апреля 2011

Оба они используют FileOutputStream для внутреннего использования:

public PrintWriter(File file) throws FileNotFoundException {
this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
     false);
}



public FileWriter(File file) throws IOException {
super(new FileOutputStream(file));
}

, но основное отличие состоит в том, что PrintWriter предлагает специальные методы:

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

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

5 голосов
/ 23 апреля 2011

A PrintWriter имеет другую концепцию обработки ошибок. Вам нужно вызывать checkError() вместо использования блоков try / catch.

3 голосов
/ 23 апреля 2011

java.io.PrintWriter в Java5 + допускает удобный метод / конструктор, который записывает в файл. От Javadoc;

Создает новый PrintWriter, без автоматической очистки строки, с указанным файлом. Этот удобный конструктор создает необходимый промежуточный OutputStreamWriter, который будет кодировать символы, используя кодировку по умолчанию для этого экземпляра виртуальной машины Java.

3 голосов
/ 23 апреля 2011

PrintWriter не выбрасывает IOException. Для этой цели следует вызвать метод checkError().

0 голосов
/ 02 июля 2017

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

0 голосов
/ 05 мая 2015

только для того, чтобы предоставить больше информации, связанной с FLUSH, и метод Close, связанный с FileOutputStream

flush () --- просто гарантирует, что любые буферизованные данные будут записаны на диск полностью сброшены и готовы для последующей записи в поток (или записывающее устройство).

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

...