1

テキストファイルから行を削除する方法を知っている人はいますか?

行ごとに読み書きして、削除したい行をスキップする以外の何かを探しています。

例: 私のファイルは 1346 行あり、520 行を削除したいと考えています。

4

5 に答える 5

4

テキスト ファイルは、ゼロ コストの再編成をサポートするものではありません。これは単に連続したバイトのシーケンスです。ファイルの途中からいくつかのバイトを削除したい場合 (そして暗黙的に、後続のすべてのバイトを上に移動すると、削除されたバイトがカバーされます)、それらの後続のすべてのバイトをコピーして再書き込みする必要があります。

いくつかのオプションがあります。ファイル全体をメモリに読み込み、削除を行ってから、ファイルを書き出します。(できれば、書き込みが正常に完了した後に元のファイルの上に名前を変更する一時ファイルに)または、ソースファイルからバッファに相当するデータを読み取り、それに何らかの作業を行うだけで、派手なフットワークを行います。

于 2009-09-02T14:05:35.490 に答える
2

ソリューションは Java で作成する必要がありますか? UNIX コマンドのsedgrepはまさにこの目的のために作成されており、パフォーマンスが向上する可能性があります。Windows を実行している場合は、Cygwinを介してこれらのツールにアクセスするか、ネイティブ ポートが存在する可能性があります。

于 2009-09-02T13:57:18.790 に答える
1

はい。ロブは正しい。これを試して

sed -e '520d' <yourfile>

出力を新しいファイルにリダイレクトする

ここで 520 は削除したい行番号です

于 2009-09-02T14:04:20.360 に答える
0

ファイル全体を読み込んで、正規表現の置換を行い(正確な一致などを知っている場合)、ファイルを書き戻すことができます。

個人的には、この答えがどれほど価値があるかわかりません:)

于 2009-09-02T13:33:01.133 に答える
0

長さ (または最後の行の内容) がわかっている場合:

long lastLineLength = lastLine.length();
RandomAccessFile raf = new RandomAccessFile("RandFile.txt", "rw");
long length = raf.length();
raf.setLength(length - lastLineLength );
raf.close();
于 2009-09-02T13:41:47.257 に答える