Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのRandomAccessFileクラスを使って.txtファイルを読み込む方法

通常、ファイルに対してデータの読み書きを行う場合、操作はファイルの先頭から順に行われるため、任意の位置から直接データを読み書きすることはできません。

そこで活躍するのが、java.ioパッケージに含まれるRandomAccessFileクラスです。このクラスを使用すると、ランダムアクセスファイルに対して自由な位置からデータの読み書きが可能になります。

RandomAccessFileは、巨大なバイト配列のようなイメージで動作します。ファイル内の現在位置を示す「ファイルポインタ」と呼ばれるカーソルを持ち、getFilePointer()メソッドで現在のポインタ位置を取得し、seek()メソッドで任意の位置に移動させることができます。

また、このクラスにはファイルの読み書きのためのさまざまなメソッドが用意されています。その中でもreadLine()メソッドは、ファイルから次の1行を読み込み、String型として返す便利なメソッドです。

readLine()メソッドでファイルを読み込む手順

RandomAccessFileクラスのreadLine()メソッドを使ってファイルからデータを読み取るには、以下の手順に従います。

  • 対象ファイルのパスをString形式で渡し、Fileクラスをインスタンス化します。
  • 読み込んだ内容を格納するために、StringBufferクラスをインスタンス化します。
  • 作成したFileオブジェクトと、アクセスモードを表す文字列(「r」:読み取り専用、「rw」:読み書き可能など)を引数に渡して、RandomAccessFileクラスをインスタンス化します。
  • ファイルポインタの位置がファイルサイズ(length()メソッドの戻り値)より小さい間、ループ処理でファイルを読み進めます。
  • 読み取った各行を、先ほど作成したStringBufferオブジェクトに追加していきます。

サンプルコード

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileExample {
   public static void main(String args[]) throws IOException {
      String filePath = "D://input.txt";
      // Fileクラスのインスタンス化
      File file = new File(filePath);
      // StringBufferのインスタンス化
      StringBuffer buffer = new StringBuffer();
      // RandomAccessFileのインスタンス化
      RandomAccessFile raFile = new RandomAccessFile(file, "rw");
      // readLine()メソッドで各行を読み込む
      while(raFile.getFilePointer() < raFile.length()) {
         buffer.append(raFile.readLine()+System.lineSeparator());
      }
      String contents = buffer.toString();
      System.out.println("Contents of the file: \n"+contents);
   }
}

実行結果

Contents of the file:
Tutorials Point originated from the idea that there exists a class of readers who respond better 
to online content and prefer to learn new skills.
Our content and resources are freely available and we prefer to keep it that way to encourage 
our readers acquire as many skills as they would like to.
We don’t force our readers to sign up with us or submit their details either.
Enjoy the free content

このように、RandomAccessFileクラスとreadLine()メソッドを組み合わせることで、テキストファイルの内容を簡単に1行ずつ読み込むことができます。ファイルポインタを制御すれば、ファイルの途中から読み書きすることも可能になるため、大きなファイルの部分的な処理にも役立ちます。

  1. JavaでCSVファイルを読み込む方法|BufferedReaderによる基本的なデータ読み取り手順

    CSVとは「Comma Separated Values(カンマ区切り値)」の略で、テキスト形式のデータファイルの一種です。CSVファイルでは、1行ごとに複数の項目がカンマ(,)で区切られて記録されており、拡張子は「.csv」として保存されます。表形式のデータを扱う際に広く利用されている、シンプルで汎用性の高いフォーマットです。 JavaでCSVファイルを読み込む仕組み JavaでCSVファイルを読み込むには、BufferedReaderクラスのreadLine()メソッドを使用するのが基本的な方法です。このメソッドを使うと、ファイルの内容を1行ずつ順番に読み取ることができます。 読み取った各

  2. Javaでプロパティファイルからデータを読み取る方法を解説

    JavaのPropertiesクラスは、Hashtableクラスのサブクラスであり、永続化可能なプロパティの集合(プロパティセット)を表します。Propertiesオブジェクトはストリームへ保存したり、ストリームから読み込んだりすることができます。また、プロパティリスト内の各キーとそれに対応する値は、どちらも文字列型として扱われます。Javaでは、Propertiesファイルを使うことでアプリケーションの設定情報を外部化し、キーと値(key-value)のペアとして管理できます。Propertiesクラスが提供するload()メソッドを使用すると、.propertiesファイルに記述されたキー