[英]How do I convert an InputStream to a String in Java?
假設我有一個包含文本數據的InputStream
,我想將其轉換為String
(例如,我可以將流的內容寫入日志文件)。
獲取InputStream
並將其轉換為String
的最簡單方法是什么?
public String convertStreamToString(InputStream is) {
// ???
}
如果你想簡單可靠地做到這一點,我建議使用Apache Jakarta Commons IO 庫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
標記整個流,從開始到(不合邏輯的)下一個開始......
- 來自甲骨文博客
由於 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 commons IOUtils
IOUtils.toString(inputStream, string);
假設我有一個包含文本數據的InputStream
,並且我想將其轉換為String
(例如,這樣我就可以將流的內容寫入日志文件)。
接受InputStream
並將其轉換為String
的最簡單方法是什么?
public String convertStreamToString(InputStream is) {
// ???
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.