1

約2Gのファイルで作業しています。ファイルを1行ずつ読んで、特定の用語を見つけたいと思います。FileReaderまたはFileInputStreamのどのクラスをより適切に使用できますか?そして、どうすれば特定の単語を効率的に見つけることができますか。split()メソッドを使用しているだけですが、java.util.regex.Patternクラスをjava.util.regex.Matcherクラスと組み合わせて使用​​できる可能性があります。

したがって、質問は次のとおりです。どのクラスを使用できますか:FileReaderまたはFileInputStream?splitメソッドまたは正規表現クラスを使用できますか

誰かがこの質問に対する答えを持っていますか?サンズ。

4

3 に答える 3

4

最良のオプションは、BufferedReader(そのreadLine()メソッドのために) ラッピング(InputStreamReaderエンコーディングを指定する機能のために) をFileInputStream(実際にファイルを読み取るために) ラッピングすることです:

BufferedReader br = new BufferedReader(new InputStreamReader(
    new FileInputStream(name), encoding));

FileReaderプラットフォームのデフォルトのエンコーディングを使用しますが、これは通常は悪い考えであり、問​​題の可能性を認識していない開発者にとって主にトラップになります。

行内の部分文字列を見つけたいだけの場合String.indexOf()は、最も効率的な方法です。実際に特定のパターンを探している場合は、正規表現を使用することをお勧めします。

于 2010-06-15T22:59:06.770 に答える
0

バイナリではなく文字列データを使用しているため、リーダー(おそらくBufferedReaderでラップされている)を使用することをお勧めします。パターンをプリコンパイルする必要があります(Pattern.compile)。Pattern.splitそれを超えて、を使用する必要があるかどうか、またはマッチャーを使用する方が適切かどうかは、説明からは不明です。

str.split(regex, limit)と同等であることに注意してくださいPattern.compile(regex).split(str, limit)

于 2010-06-15T22:53:56.360 に答える
0

BufferedReaderには、行ごとreadLine()に読み取るために使用できるメソッドがあります。( Readerand Writer) クラスは文字列データに使用できますが、InputStream(and OutputStream) はバイナリ データ (バイト配列) に使用する必要があります。

BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while((line = reader.readLine()) != null) {
    // Do something with the line
}
于 2010-06-15T22:59:33.100 に答える