如何在Java中将InputStream转换为String?

时间:2009-11-19 14:47:27

标签: java stream inputstream

假设我有InputStream包含文本数据,我想将其转换为String(例如,我可以将流的内容写入日志文件)。 / p>

采用InputStream并将其转换为String的最简单方法是什么?

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

7 个答案:

答案 0 :(得分:23)

如果您想简单可靠地执行此操作,建议您使用Apache Jakarta Commons IO库IOUtils.toString(java.io.InputStream, java.lang.String)方法。

答案 1 :(得分:17)

这是我的版本,

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 :(得分:4)

String text = new Scanner( inputStream).useDelimiter("\\A").next();

更多here

答案 3 :(得分: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上找到的解决方案。我在这里发表评论和评论。

答案 4 :(得分:1)

一种不错的方法是使用Apache commons IOUtils

IOUtils.toString(inputStream, string);

答案 5 :(得分:1)

使用Java 9+甚至更短的版本:

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

注意:在此示例中,未关闭InputStream。

答案 6 :(得分:0)

下面的代码可能会对您有所帮助。

public String convertBytestoString(InputStream inputStream)
{
    int bytes;
    byte[] buffer = new byte[1024];

    bytes = inputStream.read(buffer);
    String stringData = new String(buffer,0,bytes);

    return stringData;

}