Как преобразовать InputStream в String в Java?
Предположим, что у меня есть InputStream
, который содержит текстовые данные, и я хочу преобразовать его в String
(например, чтобы я мог написать содержимое потока в файл журнала).
Каков самый простой способ взять InputStream
и преобразовать его в String
?
public String convertStreamToString(InputStream is) {
// ???
}
Ответы
Ответ 1
Это моя версия,
public static String readString(InputStream inputStream) throws IOException {
ByteArrayOutputStream into = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
for (int n; 0 < (n = inputStream.read(buf));) {
into.write(buf, 0, n);
}
into.close();
return new String(into.toByteArray(), "UTF-8"); // Or whatever encoding
}
Ответ 2
Если вы хотите сделать это просто и надежно, я предлагаю использовать Apache Jakarta Commons IO library IOUtils.toString(java.io.InputStream, java.lang.String)
.
Ответ 3
String text = new Scanner(inputStream).useDelimiter("\\A").next();
Единственная хитрость - вспомнить регулярное выражение \A
, которое соответствует началу ввода. Это эффективно говорит Scanner
о токенизации всего потока от начала до (нелогичного) следующего начала...
- из блога Oracle
Ответ 4
Вы можете использовать BufferedReader
для чтения потока в StringBuilder
в цикле, а затем получить полное содержимое из StringBuilder
:
public String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
Полное раскрытие: Это решение, которое я нашел на KodeJava.org. Я размещаю его здесь для комментариев и критики.