ZetCode

Java InputStreamReader

last modified March 3, 2024

In this article we show how to use Java InputStreamReader to read text in Java.

JavaInputStreamReader is a bridge between byte streams and character streams. It reads bytes and decodes them into characters using a specified charset.

It is recommended to wrap an InputStreamReader within a BufferedReader for optimal efficiency.

Note that when working with character streams in Java, we should avoid using streams that rely on default encoding, such as FileReader or PrintWriter.

Reading from a FileInputStream

In the first example, we use InputStreamReader to read text from a file stream.

russian-text.txt
Пе́рвая мирова́я война́ (28 июля 1914 — 11 ноября 1918) — один
из самых широкомасштабных вооружённых конфликтов в истории человечества.
Формальным поводом к войне послужили события в Сараеве,
где 28 июня 1914 года девятнадцатилетний боснийский серб, студент
Гаврило Принцип осуществил покушение, в результате которого был убит
австрийский эрцгерцог Франц Фердинанд и его морганатическая жена София Хотек.

We have a text in Cyrillic.

Main.java
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

void main() throws Exception {

    String fileName = "russian-text.txt";

    try (var fis = new FileInputStream(fileName);
            var isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
            var br = new BufferedReader(isr)) {

        String line;

        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    }
}

The example reads a small text in Russian language.

try (var fis = new FileInputStream(fileName);
        var isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
        var br = new BufferedReader(isr)) {

A FileInputStream is used to create a file stream. The FileInputStream is wrapped into a InputStreamReader for reading text data. We set the StandardCharsets.UTF_8 encoding. Finally, the InputStreamReader is wrapped into a BufferedReader for optimal efficiency.

Reading from standard input stream

The second example uses InputStreamReader to read text from standard input stream.

Main.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

void main() throws IOException {

    try (var br = new BufferedReader(new InputStreamReader(System.in,
                    StandardCharsets.UTF_8))) {

        String line;
        System.out.print("Give me a cookie: ");

        while (!(("cookie").equals(line = br.readLine()))) {

            System.out.println(line);
            System.out.print("Give me a cookie: ");
        }
    }
}

The example prints a prompt and awaits a response from a user. The program ends when it receives the correct input.

try (var br = new BufferedReader(new InputStreamReader(System.in,
                StandardCharsets.UTF_8))) {

We use System.in to read from standard input.

Reading from URL stream

The following example reads text from a network stream with InputStreamReader.

Main.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.nio.charset.StandardCharsets;

void main() throws IOException {

    var url = URI.create("https://www.webcode.me").toURL();

    try (var isr = new InputStreamReader(url.openStream(), StandardCharsets.UTF_8);
            var br = new BufferedReader(isr)) {

        String line;
        var sb = new StringBuilder();

        while ((line = br.readLine()) != null) {

            sb.append(line);
            sb.append(System.lineSeparator());
        }

        System.out.println(sb.toString());
    }
}

The example reads text from a website.

try (var isr = new InputStreamReader(url.openStream(), StandardCharsets.UTF_8);
        var br = new BufferedReader(isr)) {

The example opens a stream from the specified URL. It reads HTML code from the webcode.me webpage.

Source

Java InputStreamReader - language reference

In this article we have shown how to work with Java InputStreamReader to read text in Java.

Author

My name is Jan Bodnar and I am a passionate programmer with many years of programming experience. I have been writing programming articles since 2007. So far, I have written over 1400 articles and 8 e-books. I have over eight years of experience in teaching programming.

List all Java tutorials.