テキストデータを含むがあり、InputStream
これをに変換したいとしますString
(たとえば、ストリームの内容をログファイルに書き込むことができます)。
InputStream
を取得してに変換する最も簡単な方法は何String
ですか?
public String convertStreamToString(InputStream is) {
// ???
}
テキストデータを含むがあり、InputStream
これをに変換したいとしますString
(たとえば、ストリームの内容をログファイルに書き込むことができます)。
InputStream
を取得してに変換する最も簡単な方法は何String
ですか?
public String convertStreamToString(InputStream is) {
// ???
}
簡単かつ確実に実行したい場合は、Apache JakartaCommonsIOライブラリーIOUtils.toString(java.io.InputStream, java.lang.String)
メソッドを使用することをお勧めします。
これは私のバージョンです、
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
}
String text = new Scanner(inputStream).useDelimiter("\\A").next();
\A
唯一注意が必要なのは、入力の先頭に一致する正規表現を覚えておくことです。Scanner
これは、最初から(非論理的な)次の始まりまで、ストリーム全体をトークン化する ように効果的に指示します...- Oracleブログ
から
Java 9以降InputStream.readAllBytes()はさらに短くなります。
String toString(InputStream inputStream) throws IOException {
return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); // Or whatever encoding
}
注:この例では、 InputStreamは閉じられていません。
を使用し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で見つけた解決策です。コメントと批評のためにここに投稿しています。
これを行う良い方法は、Apacheコモンズを使用することです IOUtils
IOUtils.toString(inputStream, string);