すべてのファイルをローカルマシンにダウンロードせずに、リモートマシン(ネットワーク経由でアクセス可能)にある大きなファイルの最後のN行を読み取るプログラムを作成することは可能ですか?実装はローカルコンピュータでのみ行う必要があり、リモートで変更を加えることはできません。
可能であれば、Javaでそれをどのように行うことができますか?
すべてのファイルをローカルマシンにダウンロードせずに、リモートマシン(ネットワーク経由でアクセス可能)にある大きなファイルの最後のN行を読み取るプログラムを作成することは可能ですか?実装はローカルコンピュータでのみ行う必要があり、リモートで変更を加えることはできません。
可能であれば、Javaでそれをどのように行うことができますか?
以下を参照してください:テキスト ファイルの最後の行をすばやく読み取りますか?
また、ファイルの最後の N 行を読み取る方法の例も提供します。seek コマンドを使用して、読み取りたくないバイトをスキップします。
ファイルを開いてアクセスするには、バッファリングされていない io 関数を使用する必要があります ( open
/ read
/lseek
またはCreateFile
/ ReadFile
/ SetFilePointer
)。次にopen
、ファイルを検索し、ファイルの末尾に近い場所をシークします: lseek(fd,SEEK_END,-1024)
. 次に、ファイルから 1024 バイトを読み取り、読み取ったデータをスキャンして行終端シーケンスを探します。行数が N+1 未満の場合は、オフセット -2048 で再度シークし、余分な 1024 バイトを読み取ります。バッファリングしたデータに N+1 行終端シーケンスが表示されるまで、このプロセスを繰り返します。
それでおしまい。