Java アドバンス

Java でのファイル読み取り

1. ファイルの読み取り

これまでのチャプターでは、ファイルの作成方法と書き込み方法について学習しました。

以下の例では、Scanner クラスを使用して、前のチャプターで作成したテキストファイルの内容を読み取ります。

実装例:

import java.io.File;                  // Fileクラスをインポート
import java.io.FileNotFoundException; // エラーハンドリング用の例外クラスをインポート
import java.util.Scanner;             // テキストファイルを読み取るためのScannerクラスをインポート

public class ReadFile {
  public static void main(String[] args) {
    File myObj = new File("filename.txt");

    // try-with-resources: Scannerは自動的にクローズされます
    try (Scanner myReader = new Scanner(myObj)) {
      while (myReader.hasNextLine()) {
        String data = myReader.nextLine();
        System.out.println(data);
      }
    } catch (FileNotFoundException e) {
      System.out.println("エラーが発生しました。");
      e.printStackTrace();
    }
  }
}

出力結果:

Javaでのファイル操作はトリッキーかもしれませんが、十分に楽しいものです!

解説

このプログラムは filename.txt という名前のファイルを開き、Scanner を使用して一行ずつ読み取ります。各行はコンソールに出力されます。もしファイルが見つからない場合、プログラムは代わりに「エラーが発生しました。」と出力します。

2. ファイル情報の取得

ファイルに関する詳細な情報を取得するには、File クラスの各種メソッドを使用します。

実装例:

import java.io.File;  // Fileクラスをインポート

public class GetFileInfo { 
  public static void main(String[] args) {
    File myObj = new File("filename.txt");
    if (myObj.exists()) {
      System.out.println("ファイル名: " + myObj.getName());
      System.out.println("絶対パス: " + myObj.getAbsolutePath());
      System.out.println("書き込み可能: " + myObj.canWrite());
      System.out.println("読み取り可能: " + myObj.canRead());
      System.out.println("ファイルサイズ(バイト): " + myObj.length());
    } else {
      System.out.println("ファイルが存在しません。");
    }
  }
}

出力結果の例:

ファイル名: filename.txt
絶対パス: C:\Users\MyName\filename.txt
書き込み可能: true
読み取り可能: true
ファイルサイズ(バイト): 0

3. その他のファイル読み取り手法

Javaにはファイルを読み取るために使用できるクラスがいくつかあり、用途に応じて使い分けます。

  • Scanner:シンプルなテキストの読み取りや、数値や単語を簡単にパース(解析)したい場合に最適です。
  • BufferedReader:高速であり、一行ずつ読み取る機能に優れているため、大きなテキストファイルを扱う際に適しています。
  • FileInputStream:画像、音声、PDFなどのバイナリデータを扱う場合や、生のバイトデータを完全に制御する必要がある場合に最適です。