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 text\r\n");
fw.write("filewriter text\r\n");
pw.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
7 ответов
Согласно coderanch.com, если мы объединяем ответы, мы получаем:
FileWriter - это символьное представление IO. Это означает, что его можно использовать для написания символов. Внутренне FileWriter будет использовать набор символов по умолчанию базовой ОС, преобразовывать символы в байты и записывать их на диск.
PrintWriter & FileWriter.
сходства
- Оба простираются от писателя.
- Оба являются классами представления символов, это означает, что они работают с символами и преобразуют их в байты, используя набор символов по умолчанию.
Различия
- FileWriter выдает IOException в случае любого сбоя ввода-вывода, это проверенное исключение.
- Ни один из методов PrintWriter не генерирует IOException, вместо этого они устанавливают логический флаг, который можно получить с помощью checkError ().
- PrintWriter имеет дополнительный конструктор, который вы можете использовать для включения автоматической очистки при вызове определенных методов. В FileWriter такой опции не существует.
- При записи в файлы 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
Оба из них используют 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 или format, а не всякий раз, когда выводится символ новой строки. Эти методы используют собственное представление платформы о разделителе строк, а не символ новой строки.
PrintWriter
имеет другую концепцию обработки ошибок. Вам нужно позвонить checkError()
вместо использования блоков try/catch.
PrintWriter
не бросает IOException
. Вы должны позвонить checkError()
метод для этой цели.
java.io.PrintWriter
в Java5+ допускается для удобства метод / конструктор, который пишет в файл. От Javadoc;
Создает новый PrintWriter, без автоматической очистки строки, с указанным файлом. Этот удобный конструктор создает необходимый промежуточный OutputStreamWriter, который будет кодировать символы, используя набор символов по умолчанию для этого экземпляра виртуальной машины Java.
Просто чтобы предоставить больше информации, связанной с FLUSH и метод Close, связанный с FileOutputStream
flush () --- просто гарантирует, что любые буферизованные данные будут записаны на диск полностью сброшенными и впоследствии готовы к повторной записи в поток (или записывающее устройство).
close () ---- сбрасывает данные и закрывает любые файловые дескрипторы, сокеты или что-либо еще. Теперь соединение потеряно, и вы ничего не можете записать в outputStream.
Тот факт, что java.io.FileWriter опирается на кодировку символов по умолчанию для платформы, делает его довольно бесполезным для меня. Вы никогда не должны предполагать что-либо о среде, в которой будет развернуто ваше приложение.