0

ファイルの最後に毎回文字列をテキストファイルに書き込みたい。そして、テキストファイルで特定の文字列を検索して見つけた場合、その行を別の行に置き換えたいと思います。

私はこれを考えています:テキストファイルの行を数え、+1を追加してから、書きたい文字列をそのインデックスに書き込みます。しかし、テキストファイルの特定の行番号に書き込むことさえ可能ですか?

そして、特定の行を別の文字列に更新するのはどうですか?

ありがとう!

4

2 に答える 2

4

あなたはそれをしたくありません:それは災害のレシピです。元のファイルの変更中に書き込みに失敗すると、元のファイルが破損します。

二重書き込みプロトコルを使用し、変更されたファイルを別のファイルに書き込みます。書き込みが成功した場合にのみ、そのファイルの名前を元のファイルに変更します。

ファイルが大きすぎない場合は、「大きい」の定義List<String>として、宛先ファイル用にを作成することをお勧めします。元のファイルを1行ずつ読み取り、そのリストに追加します。リストの処理が完了したら(質問は実際に何が起こるかわからない)、それぞれStringを他のファイルに書き込み、フラッシュして閉じ、それが成功した場合は、元のファイルに名前を変更します。

于 2013-01-01T11:42:13.927 に答える
0
  1. 文字列を追加する場合、FileOutputStreamには true に設定できる代替コンストラクターがあり、追加用に開くことができます。

  2. たとえば、文字列をコピーせずにファイルに置き換えたい場合は、代わりにRandomAccessFileを使用することをお勧めします。ただし、ラインの長さが変化する場合、これは信頼できません。固定長レコードの場合、これは次のように機能するはずです。

    • オフセットに移動
    • 書く

また、(setLength を使用して) '切り詰める' こともできるため、末尾のブロックを取り除く必要がある場合は、そのように破棄することができます。

3 番目の解決策は、mmap に依存することです。これには、ファイル全体のメモリ マップ バイトバッファが必要です。ソリューションの実現可能性全体を考慮しているわけではありませんが (プレーン C で動作します)、Java プラットフォームとオペレーティング システムの両方を考慮すると、実際にはより正確に「見えます」。

于 2013-01-01T11:29:45.620 に答える