Потоки ввода/вывода. PrintWriter и PrintStream
Last updated: 5 мая 2025 г.Часто так бывает, что нам нужно ввести куда-то информацию и откуда-то ее вывести. Например, извлечь что-нибудь из файла или записать туда что-либо.
При этом логично, что разные источники (будь-то файл или консоль или что-либо еще) с которыми мы совершаем ввод/вывод различны по своему устройству, соответственно и средства для взаимодействия с этими разными источниками должны быть разными. Например, чтобы вводить информацию в файлик и выводить информацию из файлика используются одни средства, а для ввода/вывода в консоль уже другие средства, для ввода/вывода куда-то еще другие.
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, что можно указать кодировку).
Пример программы:
1import java.io.*;
2import java.util.*;
3
4class PrintSWLesson {
5 public static void main(String[] args) {
6
7 //так как System.out объект PrintStream можем сделать так
8 PrintStream ps = System.out;
9 ps.println("PrintStream");
10
11 //или с помощью PrintWriter. В конструктор передаем поток,
12 //в который будем передавать строку с помощью println
13 //в данном случае поток вывода в консоль System.out
14 PrintWriter pw = new PrintWriter(System.out);
15 pw.println("PrintWriter");
16 pw.flush(); //про flush чуть позже
17 }
18}
Вывод:

Дополнительные материалы
Официальная документация по PrintStream и PrintWriter
Разница между потоками байтов и символов на JournalDev
Разница между PrintWriter и PrintStream на Stack Overflow
Следующие уроки
FileStream в Java: чтение и запись файлов
7
мин.
DataStream в Java
8
мин.
BufferedStream в Java
11
мин.