162

AndroidのアセットディレクトリからInputStreamを使用して、テキストファイルを1行ずつ読み取ろうとしています。

readLine()を使用できるように、InputStreamをBufferedReaderに変換したいと思います。

私は次のコードを持っています:

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

3行目は、次のエラーをドロップします。

この行に複数のマーカー
コンストラクターBufferedReader(InputStream)は検出されていません。

私がC++でやろうとしていることは、次のようになります。

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

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

私は何を間違っているのですか、それともどのようにすればよいですか?ありがとう!

4

3 に答える 3

305

BufferedReaderInputStream直接ラップすることはできません。別のをラップし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 に答える