2011-03-04 96 views
124

我試圖從Android的資產目錄中使用InputStream逐行讀取文本文件。將InputStream轉換爲BufferedReader

我想將InputStream轉換爲BufferedReader以便能夠使用readLine()。

我有以下代碼:

InputStream is; 
is = myContext.getAssets().open ("file.txt"); 
BufferedReader br = new BufferedReader (is); 

第三行下降以下錯誤:

Multiple markers at this line 
The constructor BufferedReader (InputStream) is undefinded.

我試圖在C++做會是這樣的:

StreamReader file; 
file = File.OpenText ("file.txt"); 

line = file.ReadLine(); 
line = file.ReadLine(); 
... 

我在做什麼錯,或者我該怎麼做?謝謝!

回答

226

BufferedReader無法直接包裝InputStream。它包裹另一個Reader。在這種情況下,你想要做的事,如:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
+0

是的,使用由BufferedReader包裝的InputStreamReader包裝InputStream是使用readLine()函數的常見「技巧」。 – Anton 2014-09-29 11:09:47

+11

我推薦: 'BufferedReader br = new BufferedReader(new InputStreamReader(is,StandardCharsets.UTF_8));' 在Java 7中添加 – brcolow 2015-03-19 21:51:47

+0

StandardCharsets不適用於API級別> 19。 @brcolow – Florida 2015-08-15 21:21:46

17
InputStream is; 
InputStreamReader r = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(r); 
19

一個BufferedReader構造方法帶有reader作爲參數,而不是一個InputStream。你應該首先從信息流中創建一個閱讀器,像這樣:

Reader reader = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(reader); 

Preferrably,你也給StreamReader的構造函數提供一個字符集或字符編碼名稱。由於流只提供字節,因此將它們轉換爲文本意味着編碼必須是已知的。如果您沒有指定它,則假定系統默認。

相關問題