ランダムアクセスファイル
Java は、ファイル内の任意の場所でデータを読み書きできるようにする RandomAccessFile クラスを提供します。これまでに使用したストリームはすべて、読み取り専用 または 書き込み専用 ストリームと呼ばれます。これらのストリームはシーケンシャル ストリームと呼ばれます。シーケンシャル ストリームを使用して開かれるファイルは、シーケンシャル アクセス ファイルと呼ばれます。順アクセスファイルの内容は更新できません。ただし、多くの場合、ファイルの変更が必要になります。 Java は、ファイル内の任意の場所でデータの読み取りおよび書き込みを可能にする RandomAccessFile クラスを提供します。 RandomAccessFile クラスを使用して開かれたファイルは、ランダム アクセス ファイル と呼ばれます。
RandomAccessFile クラスは、以下の図に示すように、DataInput インターフェイスと DataOutput インターフェイスを実装します。 DataInput インターフェースは、プリミティブ型の値と文字列を読み取るためのメソッドを定義します (例: readInt、readDouble、readChar、) readBoolean、readUTF) と DataOutput インターフェイスは、プリミティブ型の値と文字列を書き込むためのメソッドを定義します (例: writeInt、writeDouble、writeChar、writeBoolean、writeUTF).
RandomAccessFile を作成する場合、r または rw の 2 つのモードのいずれかを指定できます。モード r はストリームが読み取り専用であることを意味し、モード rw はストリームが読み取りと書き込みの両方を許可することを示します。たとえば、次のステートメントは新しいストリーム raf を作成します。これにより、プログラムはファイル test.dat: に対して読み書きできるようになります。
RandomAccessFile raf = new RandomAccessFile("test.dat", "rw");
test.dat がすでに存在する場合、それにアクセスするために raf が作成されます。 test.dat が存在しない場合は、test.dat という名前の新しいファイルが作成され、新しいファイルにアクセスするために raf が作成されます。メソッド raf.length() は、常に test.dat 内のバイト数を返します。ファイルに新しいデータを追加すると、raf.length() が増加します。
ファイルを変更するつもりがない場合は、r モードで開きます。これにより、ファイルが意図せず変更されるのを防ぎます。
ランダム アクセス ファイルは一連のバイトで構成されます。ファイル ポインター と呼ばれる特別なマーカーが、これらのバイトの 1 つに配置されます。読み取りまたは書き込み操作は、ファイル ポインターの位置で行われます。ファイルを開くと、ファイル ポインタがファイルの先頭に設定されます。ファイルにデータを読み書きすると、ファイル ポインタは次のデータ項目に移動します。たとえば、readInt() を使用して int 値を読み取る場合、JVM はファイル ポインターから 4 バイトを読み取り、ファイル ポインターは 4 バイト進んでいます。
の場合、raf.seek(position) メソッドを使用して、ファイル ポインターを指定した位置に移動できます。 raf.seek(0) はファイルの先頭に移動し、raf.seek(raf.length()) はファイルの末尾に移動します。以下のコードは、RandomAccessFile. を示しています。
package demo; import java.io.*; public class TestRandomAccessFile { public static void main(String[] args) throws IOException { try( // Create a random access file RandomAccessFile inout = new RandomAccessFile("inout.dat", "rw"); ) { // Clear the file to destroy the old contents if exists inout.setLength(0); // Write new integers to the file for(int i = 0; i < 200; i++) inout.writeInt(i); // Display the current length of the file System.out.println("Current file length is " + inout.length()); // Retrieve the first number inout.seek(0); // Move the file pointer to the beginning System.out.println("The first number is " + inout.readInt()); // Retrieve the second number inout.seek(1 * 4); // Move the file pointer to the second number System.out.println("The second number is " + inout.readInt()); // Retrieve the tenth number inout.seek(9 * 4); // Move the file pointer to the tenth number System.out.println("The tenth number is " + inout.readInt()); // Modify the eleventh number inout.writeInt(555); // Append a new number inout.seek(inout.length()); // Move the file pointer to the end inout.writeInt(999); // Display the new length System.out.println("The new length is " + inout.length()); // Retrieve the new eleventh number inout.seek(10 * 4); // Move the file pointer to the eleventh number System.out.println("The eleventh number is " + inout.readInt()); } } }
2 番目の数字は 1
10番目の数字は9です
新しい長さは 804
11番目の数字は555
が inout.dat という名前のファイルに対してモード rw で作成され、8 行目で読み取りと書き込みの両方の操作が可能になります。
inout.setLength(0)は、11 行目で長さを 0 に設定します。これにより、事実上、ファイルの古い内容が破棄されます。
forループは、0 から 199 までの 200 int 値をファイルの 14 行目と 15 行目に書き込みます。 🎜>int 値は 4 バイトを必要とし、inout.length() から返されるファイルの合計長は 800 になります (18 行目)。サンプル出力に示すように。
21 行目で inout.seek(0) を呼び出すと、ファイル ポインターがファイルの先頭に設定されます。 inout.readInt() は、22 行目の最初の値を読み取り、ファイル ポインタを次の番号に移動します。 2 番目の数値は 26 行目で読み取られます。
inout.seek(9 * 4) (29 行目) ファイル ポインタを 10 番目の番号に移動します。 inout.readInt() は 10 番目の数値を読み取り、ファイル ポインタを 30 行目の 11 番目の数値に移動します。 inout.write(555) は、現在の位置に新しい 11 番目の数値を書き込みます ( 33行目)。前の 11 番目の数字は破棄されます。
inout.seek(inout.length()) は、ファイル ポインタをファイルの末尾に移動します (行 36)。 inout.writeInt(999) は、999 をファイルに書き込みます (行 37)。ファイルの長さが 4 だけ増加したため、inout.length() は 804 を返します (行 40)。
inout.seek(10 * 4) は、ファイル ポインタを 43 行目の 11 番目の番号に移動します。新しい 11 番目の番号 555 が 44 行目に表示されます。 >
以上がランダムアクセスファイルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。
