3

まず、私の英語について申し訳ありません。

Javaで大きなファイルを読み取る効果的な方法を探しています。ログ分析プログラムを作成しており、少なくとも 500 MB から 4 GB のログ ファイルがあります。Filechannel クラス (メモリ マップ ファイル) を試しましたが、効果的な結果が得られませんでした。こちらをご覧ください: http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ314_029.htm

私の目的は、バッファ内のデータを読み取り、正規表現を使用することです。

DumpFilePath ファイルのサイズは約 4 GB です。

public static List<String> anaysis_main(String pattern_string) throws IOException {

    List<String> result = new ArrayList<String>();
    Pattern pattern = Pattern.compile(pattern_string, Pattern.CASE_INSENSITIVE);


    File file = new File(DumpFilePath);

    RandomAccessFile raf = new RandomAccessFile(file,"rw");
    String line = null;
    raf.seek(0);


    int i = 0;

    while((line=raf.readLine())!=null)
    {
        Matcher matcher = pattern.matcher(line);
        while (matcher.find())
        {               
            result.add(matcher.group(1));
        }
    }
    raf.close();

    return result;
}

何か案は?

4

1 に答える 1

2

バッファリーダーを使用できますか? バッファ付きリーダーの詳細については、こちらを参照してください。

コードは次のようになります。

File file = new File(DumpFilePath);

//Open the file for reading
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while ((thisLine = br.readLine()) != null) { 

    // Your line by line parsing payload here

    Matcher matcher = pattern.matcher(thisLine);
    while (matcher.find())
    {               
        result.add(matcher.group(1));
        }

} // end while 
} // end try
catch (IOException e) {
System.err.println("Error: " + e);
}
于 2013-06-16T05:31:10.900 に答える