HOWTO · Java
Converter um InputStream em uma string em Java
Este artigo explica as formas de converter um InputStream para uma String em Java usando exemplos
Nesta página
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