Comment convertir un InputStream en une chaîne de caractères en Java

Supposons que je dispose d’un InputStream contenant des données textuelles et que je souhaite le convertir en String, afin de pouvoir l’écrire dans un fichier log, par exemple.

Quel est le moyen le plus simple de prendre l’InputStream et de le convertir en String ?

public String convert(InputStream obj) {
    // code...
}

La meilleure façon de le faire est d’utiliser Apache Commons et IOUtils pour copier l’InputStream dans un StringWriter… quelque chose comme suit

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();

ou bien

String str = IOUtils.toString(inputStream, encoding); 

Vous pouvez également utiliser ByteArrayOutputStream si vous ne souhaitez pas mélanger vos flux et vos scripts.

Apache Commons permet :

String str = IOUtils.toString(myInputStream, "UTF-8");

Bien entendu, vous pouvez choisir d’autres codages de caractères que l’UTF-8.

Vous prouver utiliser la classe StringBuilder et BufferedReader pour convertir un InputStream en une chaîne de caractères en Java.

InputStream stream = /* Your InputStream */;
StringBuilder builder = new StringBuilder();
BufferedReader buffer = new BufferedReader(new InputStreamReader(stream));
String read;

while ((read=buffer.readLine()) != null) {
    //System.out.println(read);
    buffer.append(read);
}

buffer.close();
return builder.toString();

Si vous utilisez Google-Collections/Guava, vous pouvez procéder comme suit :

InputStream stream = /* Your InputStream */;
String content = CharStreams.toString(new InputStreamReader(stream, Charsets.UTF_8));
Closeables.closeQuietly(stream);

Notez que le deuxième paramètre (c’est-à-dire Charsets.UTF_8) pour l’InputStreamReader n’est pas nécessaire, mais c’est généralement une bonne idée de spécifier l’encodage si vous le connaissez (ce qui devrait être le cas !).