大きなテキスト ファイルの最終行を効率的に取得する
大規模なテキスト ファイルを処理する場合、最終行を効率的に取得することが重要です。大きなファイルの場合、ランダム アクセスは時間がかかるため、現実的ではありません。代わりに、次の解決策を検討してください:
最後の非空白行を返す:
以下の tail 関数は、ロードまたはロードせずに、ファイルの最後の非空白行を迅速に取得します。ファイル全体を走査します。ファイルの末尾までシークし、改行に遭遇するまで文字を逆方向に読み取り、最後の行を構築して返します。
public String tail(File file) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { // ... sb.append((char) readByte); } // ... }
最後の N 行を返します:
代わりに最後の N 行が必要な場合は、tail2 関数を使用します。これは同様の手法を使用していますが、出力を反転して構築する前に改行をカウントして目的の行を決定します。
public String tail2(File file, int lines) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { line = line 1; sb.append((char) readByte); } // ... }
呼び出しと使用:
File file = new File("D:\\stuff\\huge.log"); System.out.println(tail(file)); System.out.println(tail2(file, 10));
Unicode に関する考慮事項:
実装では、文字反転を使用して行を再構築します。これは一般に効果的ですが、アクセントや帽子などの文字で Unicode 反転の問題が発生する可能性があります。したがって、さまざまな言語でこのアプローチを使用する前に、徹底的なテストが不可欠です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3