Voici une méthode utilisant uniquement la bibliothèque Java standard (notez que le flux n'est pas fermé, votre expérience peut varier).
static String convertStreamToString(java.io.InputStream is) {
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
J'ai appris cette astuce de "Trucs stupides du scanner" article. La raison pour laquelle cela fonctionne est que Scanner itère sur les tokens dans le flux, et dans ce cas nous séparons les tokens en utilisant "début de la frontière d'entrée" ( \A ), ce qui nous donne un seul jeton pour l'ensemble du contenu du flux.
Remarque : si vous devez être spécifique quant à l'encodage du flux d'entrée, vous pouvez fournir le second argument à la fonction Scanner
qui indique le jeu de caractères à utiliser (par exemple, "UTF-8").
Le conseil du chapeau va aussi à Jacob qui m'a renvoyé à cet article.
0 votes
Cela répond-il à votre question ? Le scanner saute nextLine() après avoir utilisé next() ou nextFoo() ?
2 votes
N'oubliez pas que vous devez prendre en compte l'encodage du flux d'entrée. La valeur par défaut du système n'est pas nécessairement celle que vous souhaitez.
21 votes
La plupart de ces réponses ont été écrites avant Java 9, mais maintenant vous pouvez obtenir un tableau d'octets à partir de l'InputStream en utilisant .readAllBytes. Donc, simplement "new String(inputStream.readAllBytes())" fonctionne en utilisant le constructeur byte[] de String.