In
Java I/O, there are two kinds of classes:
streams, which are meant for reading and writing bytes directly from and to a file, network connection or other communication medium, and
readers and writers, which are meant for reading and writing text.
Readers and writers are something that builds on streams: they use streams below the covers to read and write data, and what they add is interpreting the raw bytes as characters, using a character encoding.
A PrintWriter is obviously a writer, meant for writing text; it does not provide a way to directly write raw bytes (without using a character encoding).