如何在Java中將InputStream物件轉換為String?


Java提供I/O流來讀寫資料,其中流代表輸入源或輸出目標,可以是檔案、I/O裝置或其他程式等。

有兩種型別的流可用:

  • InputStream - 用於從源讀取(順序)資料。
  • OutputStream - 用於向目標寫入資料。

FileInputStream

此類從特定檔案(逐位元組)讀取資料。它通常用於讀取包含原始位元組的檔案內容,例如影像。

將InputStream物件轉換為String

您可以使用核心Java通過幾種方式將InputStream物件轉換為String。您也可以為此目的使用諸如IOUtils、Guava之類的外部庫。以下是幾種在Java中將InputStream物件轉換為String的方法(不包括外部庫)。

使用BufferedReader

BufferedReader類的readLine()方法從當前讀取器的內容中讀取一行。要使用此方法將InputStream物件轉換為String。

  • 透過將您的InputStream物件作為引數來例項化InputStreamReader類。
  • 然後,透過將上面獲得的InputStreamReader物件作為引數來建立一個BufferedReader。
  • 現在,使用readLine()方法從該讀取器讀取每一行,並將其附加到StringBuffer物件。
  • 最後,使用toString()方法將StringBuffer轉換為String。

示例

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class InputStreamToString{
   public static void main(String args[]) throws IOException {
      //Creating an InputStream object
      InputStream inputStream = new FileInputStream("D:/sample.txt");
      //creating an InputStreamReader object
      InputStreamReader isReader = new InputStreamReader(inputStream);
      //Creating a BufferedReader object
      BufferedReader reader = new BufferedReader(isReader);
      StringBuffer sb = new StringBuffer();
      String str;
      while((str = reader.readLine())!= null){
         sb.append(str);
      }
      System.out.println(sb.toString());
   }
}

輸出

Tutorials Point originated from the idea that there exists a class of readers who respond better to on-line
content and prefer to learn new skills at their own pace from the comforts of their drawing rooms.

使用Scanner類

Scanner類的nextLine()方法逐行讀取底層inputStream的內容。要使用此方法將InputStream物件轉換為String。

  • 透過將您的InputStream物件作為引數來例項化Scanner類。
  • 使用nextLine()方法從該Scanner讀取每一行,並將其附加到StringBuffer物件。
  • 最後,使用toString()方法將StringBuffer轉換為String。

示例

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
public class InputStreamToString {
   public static void main(String args[]) throws IOException {
      //Creating an InputStream object
      InputStream inputStream = new FileInputStream("D:/sample.txt");
      //Creating a Scanner object
      Scanner sc = new Scanner(inputStream);
      //Reading line by line from scanner to StringBuffer
      StringBuffer sb = new StringBuffer();
      while(sc.hasNext()){
         sb.append(sc.nextLine());
      }
      System.out.println(sb.toString());
   }
}

輸出

Tutorials Point originated from the idea that there exists a class of readers who respond better to on-line
content and prefer to learn new skills at their own pace from the comforts of their drawing rooms.

使用InputStreamReader類

InputStreamReader類的read()方法接受字元陣列作為引數,並將當前流的內容讀取到給定的陣列中。要使用此方法將InputStream物件轉換為String。

  • 透過將您的InputStream物件作為引數來例項化InputStreamReader類。
  • 使用InputStreamReader類的read()方法將當前流讀取器的內容讀取到字元陣列中。
  • 最後,透過將其作為引數傳遞給其建構函式來將字元轉換為String。

示例

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class FileInputStreamExample {
   public static void main(String args[]) throws IOException {
      //Creating a File object
      File file = new File("D:/sample.txt");
      //Creating an InputStream object
      InputStream inputStream = new FileInputStream(file);
      //creating an InputStreamReader object
      InputStreamReader isReader = new InputStreamReader(inputStream);
      //Creating a character array
      char charArray[] = new char[(int) file.length()];
      //Reading the contents of the reader
      isReader.read(charArray);
      //Converting character array to a String
      String contents = new String(charArray);
      System.out.println(contents);
   }
}

輸出

Tutorials Point originated from the idea that there exists a class of readers who respond better to on-line 
content and prefer to learn new skills at their own pace from the comforts of their drawing rooms.

更新於:2019年8月1日

10K+瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告