InputStream을 BufferedReader로 변환


149

Android의 자산 디렉토리에서 InputStream을 사용하여 한 줄씩 텍스트 파일을 읽으려고합니다.

readLine ()을 사용할 수 있도록 InputStream을 BufferedReader로 변환하고 싶습니다.

다음 코드가 있습니다.

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();
...

내가 뭘 잘못하고 있거나 어떻게해야합니까? 감사!

답변:


281

BufferedReaderInputStream직접 포장 할 수 없습니다 . 그것은 또 다른 포장 Reader. 이 경우 다음과 같은 작업을 수행하려고합니다.

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

예, BufferedReader에 의해 랩핑 된 InputStreamReader로 InputStream을 랩핑하는 것은 readLine () 함수를 사용하는 일반적인 "트릭"입니다.
Setup

14
나는 추천한다 : BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));Java 7에서 추가됨
brcolow

StandardCharsets는 API 레벨> 19에서 작동하지 않습니다. @brcolow
플로리다

1
API 레벨> = 19가 아니면 작동하지 않는다고 말하는 것 같습니까?
brcolow

23

BufferedReader 생성자는 InputStream이 아닌 독자 를 인수로 사용합니다. 먼저 스트림에서 리더를 만들어야합니다.

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

또한 StreamReader 생성자에 Charset 또는 문자 인코딩 이름을 제공하는 것이 좋습니다. 스트림은 바이트 만 제공하므로이를 텍스트로 변환하면 인코딩을 알아야합니다. 지정하지 않으면 시스템 기본값이 사용됩니다.


20
InputStream is;
InputStreamReader r = new InputStreamReader(is);
BufferedReader br = new BufferedReader(r);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.