Потоки ввода/вывода в Java. PrintWriter и PrintStream

Часто так бывает, что нам нужно ввести куда-то информацию и откуда-то ее вывести. Например, извлечь что-нибудь из файла или записать туда что-либо.

При этом логично, что разные источники (будь-то файл или консоль или что-либо еще) с которыми мы совершаем ввод/вывод различны по своему устройству, соответственно и средства для взаимодействия с этими разными источниками должны быть разными. Например, чтобы вводить информацию в файлик и выводить информацию из файлика используются одни средства, а для ввода/вывода в консоль уже другие средства, для ввода/вывода куда-то еще другие.

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

В Java есть два основных вида классов-потоков для ввода-вывода:

  • Inputstream, Outputstreamввод/вывод куда-либо неструктурированной последовательности байтов. (представляют удобные средства для передачи байтов)
  • Writer, Readerввод/вывод куда-либо последовательности символов Unicode (представляют удобные средства для передачи символов).

У этих классов есть подклассы. В этом уроке мы разберем потоки PrintWriter и PrintStream.


PrintWriter и PrintStream

Рассмотрим PrintWriter и PrintStream.

Самые простые потоки ввода/вывода – это System.in и System.out. Для ввода и вывода информации в консоль соответственно.

outэто на самом деле объект класса PrintStream. print() println()методы этого класса. Поток PrintStream с помощью print() или println() превращает переданный аргумент в один из этих методов в строку и передает в другой поток вывода куда-нибудь.

out создан за кулисами так, чтобы он выводил информацию в консоль.

PrintWriter PrintStream (нужны для передачи строк в поток) – print() println() превращают переданные аргументы в строки и передают их в какой-то поток.

PrintStream печатает на OutputStream, а PrintWriterна Writer(основное преимущество Writer, что можно указать кодировку).

Пример программы:

import java.io.*; import java.util.*; class PrintSWLesson { public static void main(String[] args) { //так как System.out объект PrintStream можем сделать так PrintStream ps = System.out; ps.println(“PrintStream”); //или с помощью PrintWriter. В конструктор передаем поток, //в который будем передавать строку с помощью println //в данном случае поток вывода в консоль System.out PrintWriter pw = new PrintWriter(System.out); pw.println(“PrintWriter”); pw.flush(); //про flush чуть позже } }

Вывод:

FileStream в Java: чтение и запись файлов

FileInputStream и FileOutputStream в Java: как читать и записывать файлы побайтно. Пример преобразования строки в байты и обратно.
Time to read: 7

DataStream в Java

DataInputStream и DataOutputStream в Java: работа с байтовыми потоками примитивных типов. Примеры чтения/записи чисел через файловый ввод-вывод.
Time to read: 8

BufferedStream в Java

BufferedInputStream и BufferedOutputStream в Java: повышение производительности ввода-вывода с помощью буферизации. Пример работы с байтовыми массивами.
Time to read: 11