PrintWriter против 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 textrn");
        fw.write("filewriter textrn");
        pw.close();
        fw.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

7 ответов


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

записывает это изображение символа ИО. Это означает, что его можно использовать для написания символов. Внутренне 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


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

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


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


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


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

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


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

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

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


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