Converter um InputStream em uma string em Java

Rupam Yadav 12 outubro 2023
  1. Utilize a API Stream para converter um InputStream para uma String
  2. Utilize ByteArrayOutputStream para ler ou converter um InputStream em String
  3. Utilize IOUtils.toString do Apache Commons para Ler ou Converter um InputStream para uma String
Converter um InputStream em uma string em Java

Neste tutorial, falaremos sobre como converter um InputStream para uma String em Java. Um InputStream é um fluxo de bytes que pode ser utilizado para realizar várias tarefas como a leitura. Em geral, é uma classe que contém tudo em bytes. Se quisermos converter este fluxo de bytes para qualquer outro tipo de dados, poderemos ter de utilizar métodos específicos.

Aqui vamos percorrer as várias maneiras pelas quais podemos ler ou converter um InputStream numa string em Java

Utilize a API Stream para converter um InputStream para uma String

Podemos converter um InputStream a uma string utilizando a API Stream que faz parte do Java 8. O InputStreamReader lê o inputStream e o BufferedReader().lines() ajuda-nos a converter este InputStream num fluxo de String. Como podemos ver, Collectors.joining() está a ser utilizado para juntar todas as strings no fluxo e depois retornar uma única string.

package com.company;

import java.io.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.io.IOUtils;

public class Main {
  public static void main(String[] args) {
    try {
      InputStream inputStream = new FileInputStream("java/sampleFile.txt");

      InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
      Stream<String> streamOfString = new BufferedReader(inputStreamReader).lines();
      String streamToString = streamOfString.collect(Collectors.joining());

      System.out.println(streamToString);

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Resultado:

This is a sample text file

Utilize ByteArrayOutputStream para ler ou converter um InputStream em String

Sabemos que um InputStream é composto por bytes, e assim podemos ByteArrayOutputStream classe que converte o readInputStream num array de bytes. Depois disso, podemos converter este array de bytes numa String utilizando toString().

package com.company;

import java.io.*;

public class Main {
  public static void main(String[] args) {
    try {
      InputStream readInputStream = new FileInputStream("java/sampleFile.txt");

      String encoding = "UTF-8";

      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      byte[] byteSize = new byte[1024];

      int length;
      while ((length = readInputStream.read(byteSize)) != -1) {
        byteArrayOutputStream.write(byteSize, 0, length);
      }

      System.out.println(byteArrayOutputStream.toString(encoding));

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Resultado:

This is a sample text file

Utilize IOUtils.toString do Apache Commons para Ler ou Converter um InputStream para uma String

Para facilitar a nossa tarefa, podemos utilizar a função IOUtils.toString incluída na biblioteca Apache Commons. Para utilizar a Biblioteca Apache Commons, podemos incluir esta dependência no nosso projecto.

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.8.0</version>
</dependency>

No exemplo abaixo, primeiro, criamos um InputStream que é um ficheiro de texto, e depois chamamos o método IOUtils.toString() que toma um InputStream e a codificação a utilizar para converter o fluxo. Estamos a utilizar a codificação UTF-8, que é universalmente utilizada.

package com.company;

import java.io.*;
import org.apache.commons.io.IOUtils;

public class Main {
  public static void main(String[] args) {
    try {
      InputStream inputStream = new FileInputStream("java/sampleFile.txt");

      String steamToString = IOUtils.toString(inputStream, "UTF-8");
      System.out.println(steamToString);

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

Resultado:

This is a sample text file
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Artigo relacionado - Java String

Artigo relacionado - Java IO