Подтвердить что ты не робот

PrintWriter vs FileWriter в Java

Являются ли 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();
    }

}
4b9b3361

Ответ 1

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

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

PrintWriter & FileWriter.

сходства

  1. Оба простираются от писателя.
  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

Ответ 2

Оба из них используют 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. Оно делает не содержат методов для написания сырья байты, для которых программа должна использовать unencoded byte streams.

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

просто чтобы предоставить дополнительную информацию, связанную с FLUSH и Close menthod, связанную с FileOutputStream

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

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

Ответ 7

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