4724 Stimmen

Wie lese/konvertiere ich einen InputStream in einen String in Java?

Wenn Sie eine java.io.InputStream Objekt, wie sollten Sie dieses Objekt verarbeiten und eine String ?


Angenommen, ich habe eine InputStream die Textdaten enthält, und ich möchte sie in eine String so dass ich das zum Beispiel in eine Protokolldatei schreiben kann.

Wie kann man am einfachsten die InputStream und konvertieren sie in eine String ?

public String convertStreamToString(InputStream is) {
    // ???
}

0 Stimmen

2 Stimmen

Denken Sie daran, dass Sie die Kodierung des Eingangsstroms berücksichtigen müssen. Die Systemvorgabe ist nicht unbedingt immer die, die Sie wollen.

23 Stimmen

Die meisten dieser Antworten wurden vor Java 9 geschrieben, aber jetzt kann man mit .readAllBytes ein Byte-Array aus dem InputStream holen. Also, einfach "new String(inputStream.readAllBytes())" funktioniert mit dem byte[] Konstruktor von String.

15voto

Matt Shannon Punkte 159

Hier sehen Sie, wie Sie es nur mit dem JDK unter Verwendung von Byte-Array-Puffern machen können. Dies ist eigentlich die Art und Weise, wie die commons-io IOUtils.copy() Methoden funktionieren alle. Sie können ersetzen byte[] con char[] wenn Sie von einer Reader anstelle eines InputStream .

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

...

InputStream is = ....
ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
byte[] buffer = new byte[8192];
int count = 0;
try {
  while ((count = is.read(buffer)) != -1) {
    baos.write(buffer, 0, count);
  }
}
finally {
  try {
    is.close();
  }
  catch (Exception ignore) {
  }
}

String charset = "UTF-8";
String inputStreamAsString = baos.toString(charset);

10voto

Raghu K Nair Punkte 3594

Am einfachsten geht das im JDK mit den folgenden Codeschnipseln.

String convertToString(InputStream in){
    String resource = new Scanner(in).useDelimiter("\\Z").next();
    return resource;
}

9voto

libnull-dev Punkte 871

In Bezug auf reduce y concat kann in Java 8 wie folgt ausgedrückt werden:

String fromFile = new BufferedReader(new   
InputStreamReader(inputStream)).lines().reduce(String::concat).get();

8voto

Christian Rädel Punkte 571

Hier ist mein Java 8 basierte Lösung, die die neue Stream-API um alle Zeilen aus einer InputStream :

public static String toString(InputStream inputStream) {
    BufferedReader reader = new BufferedReader(
        new InputStreamReader(inputStream));
    return reader.lines().collect(Collectors.joining(
        System.getProperty("line.separator")));
}

6voto

voidmain Punkte 1588

JDK 7/8 Antwort, die den Stream schließt und trotzdem eine IOException auslöst:

StringBuilder build = new StringBuilder();
byte[] buf = new byte[1024];
int length;
try (InputStream is = getInputStream()) {
  while ((length = is.read(buf)) != -1) {
    build.append(new String(buf, 0, length));
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X