0

Java を使用してテキスト ファイルの特定の部分を更新したいと考えています。ファイルをスキャンして、更新する特定の行を選択できるようにしたいと考えています。たとえば、次のファイルを指定すると、データベースのようになります。

ID Value
1  100
2  500
4  20

3 を挿入して 4 を更新したいと思います。

ID Value
1  100
2  500
3  80
4  1000

この(一見)簡単なタスクを達成する方法はありますか?ファイルに追加できることは知っていますが、ランダムアクセスにもっと興味があります

4

4 に答える 4

1

ファイルに追加できることは知っていますが、ランダムアクセスにもっと興味があります

ファイルの途中でバイトを挿入および削除しようとしています。そんなことはできません。ファイルシステムは(一般的に)それをサポートしていません。特定のバイトを上書きすることはできますが、それらを挿入または削除することはできません。

レコードが固定長 (バイト単位) の場合、特定のレコードをランダム アクセスで更新できますが、そうではないようです。

ファイル全体をメモリにロードするか、元のファイルから読み取り、必要に応じて古いデータまたは新しいデータを行ごとに新しいファイルに書き込むことができます。

于 2012-11-15T15:26:45.480 に答える
1

ファイルをメモリにロードし、値を変更してから、ファイルを再書き込みします

ロードせずにファイルに挿入する方法がある場合、私は聞いたことがありません。最初に他のデータを邪魔にならないように移動する必要があります。

巨大なファイルを扱っていない限り、多くの場合、パフォーマンスはそれほど重要ではありません

于 2012-11-15T15:24:44.973 に答える
1

Java の Random Access ファイルを使用してこれを行うことができ、利用可能なメソッドを使用して現在の書き込み位置と読み取り位置を配置できます。ここでもっと調べることができます

于 2012-11-15T15:28:59.247 に答える
0

前の回答で述べたように、ストリームを使用して単純にそれを行うことはできません。テキストファイルに保存して変更できるキーと値のペアであるプロパティを使用してみることができます。たとえば、次のコマンドを使用してファイルに新しいプロパティを追加できます

setProperty(String key, String value)

このメソッドは、新しいプロパティを追加するか、既に存在する場合は、選択したキーでプロパティの値を変更します。

ファイルの末尾に新しいプロパティが追加されることは明らかですが、ファイルへのアクセスは Hashtable メソッドの put を呼び出す getProperty メソッドで行われるため、順序付けの欠如はパフォーマンスの問題ではありません。

いくつかの例については、このチュートリアルを参照してください。

http://docs.oracle.com/javase/tutorial/essential/environment/properties.html

于 2012-11-15T16:04:54.447 に答える