将InputStream转换为BufferedReader

kar*_*e23 143 java android inputstream readline bufferedreader

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

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

我有以下代码:

InputStream is;
is = myContext.getAssets().open ("file.txt");
BufferedReader br = new BufferedReader (is);
Run Code Online (Sandbox Code Playgroud)

第三行删除以下错误:

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();
...
Run Code Online (Sandbox Code Playgroud)

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

Col*_*inD 269

BufferedReader不能InputStream直接包裹.它包装另一个Reader.在这种情况下,你想做的事情如下:

BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

  • 我建议:`BufferedReader br = new BufferedReader(new InputStreamReader(is,StandardCharsets.UTF_8));`在Java 7中添加 (14认同)
  • 我想你的意思是说除非 API 级别 >= 19 否则不起作用? (2认同)

G_H*_*G_H 23

BufferedReader构造函数将reader作为参数,而不是InputStream.您应首先从流中创建一个Reader,如下所示:

Reader reader = new InputStreamReader(is);
BufferedReader br = new BufferedReader(reader);
Run Code Online (Sandbox Code Playgroud)

最好还为StreamReader构造函数提供Charset或字符编码名称.由于流只提供字节,因此将这些字节转换为文本意味着必须知道编码.如果未指定,则假定为系统默认值.


Han*_*ans 20

InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
Run Code Online (Sandbox Code Playgroud)