English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Guida di base Java

Controllo dei flussi di lavoro di Java

Array di Java

Orientamento ad oggetti di Java (I)

Orientamento ad oggetti di Java (II)

Orientamento ad oggetti di Java (III)

Gestione delle eccezioni Java

Lista di Java

Queue di Java (coda)

Map di Java

Set di Java

Input/Output (I/O) di Java

Reader/Writer di Java

Altri argomenti di Java

Classe InputStreamReader di Java

In questo tutorial, impareremo a utilizzare InputStreamReader e i suoi metodi in Java attraverso esempi.

La classe InputStreamReader del pacchetto java.io può essere utilizzata per convertire i dati in byte in dati in caratteri.

It inherits the abstract class Reader.

The InputStreamReader class works with other input streams. It is also known as a bridge between byte streams and character streams because the InputStreamReader reads bytes as characters from the input stream.

For example, some characters need 2 bytes to be stored in memory. To read such data, we can use an input stream reader that reads 2 bytes together and converts it to the corresponding character.

Create an InputStreamReader

To create an InputStreamReader, we must first import the java.io.InputStreamReader package. After importing the package, we can create the input stream reader.

//Create an InputStream
FileInputStream file = new FileInputStream(String path);
//Create an InputStreamReader
InputStreamReader input = new InputStreamReader(file);

In the above example, we created an InputStreamReader named input and a FileInputStream named file.

Here, the data in the file is stored using some default character encoding.

However, we can also specify the type of character encoding in the file (UTF8orUTF16)

//Create an InputStreamReader, specifying the character encoding
InputStreamReader input = new InputStreamReader(file, Charset cs);

Here, we used the Charset class to specify the character encoding of the file.

Methods of InputStreamReader

The InputStreamReader class provides different implementations of the methods existing in the Reader class.

read() method

  • read() - Reads a single character from the reader

  • read(char[] array) - Reads characters from the reader and stores them in the specified array

  • read(char[] array, int start, int length) - Reads characters equal to length from the reader and stores them in the specified array starting at index start

For example, suppose we have a file namedinput.txtThe file contains the following content.

This is a line of text inside the file.

Let's try to use the InputStreamReader to read this file.

import java.io.InputStreamReader;
import java.io.FileInputStream;
class Main {
  public static void main(String[] args) {
    //Create a character array
    char[] array = new char[100];
    try {
      //Create a FileInputStream
      FileInputStream file = new FileInputStream("input.txt");
      //Create an InputStreamReader
      InputStreamReader input = new InputStreamReader(file);
      //leggi i caratteri dal file
      input.read(array);
      System.out.println("i dati dello stream:");
      System.out.println(array);
      //chiudi reader
      input.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

Risultato di output

i dati dello stream:
This is a line of text inside the file.

Nel seguente esempio, abbiamo creato un lettore di stream di input utilizzando uno stream di input di file. Il lettore di stream di input è collegato al fileinput.txtcollegamento.

 FileInputStream file = new FileInputStream("input.txt");
 InputStreamReader input = new InputStreamReader(file);

Per leggere i caratteri da un file, abbiamo utilizzato il metodo read().

Il metodo getEncoding()

Il metodo getEncoding() può essere utilizzato per ottenere il tipo di codifica utilizzato per memorizzare i dati nello stream di input. Ad esempio,

import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.io.FileInputStream;
class Main {
  public static void main(String[] args) {
    try {
      //crea un FileInputStream
      FileInputStream file = new FileInputStream("input.txt");
      //crea un InputStreamReader con codifica predefinita
      InputStreamReader input1 = new InputStreamReader(file);
      //crea un InputStreamReader con codifica specificata
      InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8"));
      //ritorna la codifica dei caratteri dello stream di input
      System.out.println("codifica dei caratteri di input1: " + input1.getEncoding());
      System.out.println("codifica dei caratteri di input2: " + input2.getEncoding());
      //chiudi reader
      input1.close();
      input2.close();
    }
    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

Risultato di output

Codifica dei caratteri di input1: Cp1252
Codifica dei caratteri di input2: UTF8

Nell'esempio sopra, abbiamo creato due lettori di input stream, rispettivamente chiamati input1 e input2.

  • input1 non specifica la codifica dei caratteri. Pertanto, il metodo getEncoding() restituisce il nome standard della codifica dei caratteri predefinita.

  • input2 specifica la codifica dei caratteriUTF8. Pertanto, il metodo getEncoding() restituisce il nome standard della codifica dei caratteri specificata.

Attenzione: Abbiamo specificato il tipo di codifica dei caratteri utilizzando il metodo Charset.forName().

Metodo close()

Per chiudere il lettore di input stream, possiamo utilizzare il metodo close(). Dopo aver chiamato questo metodo, non possiamo più utilizzare il lettore per leggere i dati.

Altri metodi di InputStreamReader

MetodoDescrizione
ready()Controlla se lo stream è pronto per essere letto
mark()Marca la posizione dei dati letti nel flusso
reset()Ripristina il punto di marca