24

テキストデータを含むがあり、InputStreamこれをに変換したいとしますString(たとえば、ストリームの内容をログファイルに書き込むことができます)。

InputStreamを取得してに変換する最も簡単な方法は何Stringですか?

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

6 に答える 6

24

簡単かつ確実に実行したい場合は、Apache JakartaCommonsIOライブラリーIOUtils.toString(java.io.InputStream, java.lang.String)メソッドを使用することをお勧めします。

于 2009-11-19T14:53:11.060 に答える
21

これは私のバージョンです、

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
}
于 2009-11-19T14:55:55.003 に答える
10
String text = new Scanner(inputStream).useDelimiter("\\A").next();

\A唯一注意が必要なのは、入力の先頭に一致する正規表現を覚えておくことです。Scannerこれは、最初から(非論理的な)次の始まりまで、ストリーム全体をトークン化する ように効果的に指示します...- Oracleブログ
から

于 2010-07-17T13:14:11.093 に答える
2

Java 9以降InputStream.readAllBytes()はさらに短くなります。

String toString(InputStream inputStream) throws IOException {
   return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); // Or whatever encoding
}

注:この例では、 InputStreamは閉じられていません。

于 2020-04-29T16:40:09.203 に答える
1

を使用し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で見つけた解決策です。コメントと批評のためにここに投稿しています。

于 2009-11-19T14:47:33.427 に答える
1

これを行う良い方法は、Apacheコモンズを使用することです IOUtils

IOUtils.toString(inputStream, string);
于 2019-12-21T15:03:37.230 に答える