162

我正在尝试使用 Android 中资产目录中的 InputStream 逐行读取文本文件。

我想将 InputStream 转换为 BufferedReader 以便能够使用 readLine()。

我有以下代码:

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

第三行删除以下错误:

此行有多个标记
构造函数 BufferedReader (InputStream) 未定义。

我在 C++ 中尝试做的事情是这样的:

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

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

我做错了什么或者我应该怎么做?谢谢!

4

3 回答 3

305

BufferedReader不能InputStream直接包装。它包装了另一个Reader. 在这种情况下,您需要执行以下操作:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
于 2011-03-04T23:00:34.463 回答
25

BufferedReader 构造函数将读取器作为参数,而不是 InputStream。您应该首先从您的流中创建一个阅读器,如下所示:

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

最好还向 StreamReader 构造函数提供一个字符集或字符编码名称。由于流只提供字节,将这些转换为文本意味着必须知道编码。如果您不指定它,则假定系统默认值。

于 2011-03-04T23:03:15.687 回答
21
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
于 2011-03-04T23:02:41.940 回答