Code-blog_java.io.Fileクラス_20250115-2

Javajava.io.Fileクラスを使ったプログラムの紹介

今日は2つ目のプログラムを作成しました。このプログラムは、java.io.Fileクラスを活用したものです。

github.com

このプログラムでは、指定したファイルパスを読み込んでFileクラスのオブジェクトを生成し、その後、そのファイルの名前とサイズを出力します。

java.io.Fileクラスは非常に便利なクラスです。このクラスを使っていると、以前取り組んだ最初のC言語プロジェクトを思い出しました。そのプロジェクトでは、CSVファイルのサイズを取得する必要がありました。その際、ChatGPTを利用してコードを生成したところ、ファイルポインタを使った実装が提案されました。しかし、私はファイルポインタの操作にあまり慣れておらず、その結果、プログラム中にバグが発生しました。その後、このバグを修正する際、開発リーダーがPOSIXのstat構造体を使用する方法を提案してくれました。このstat構造体の役割は、java.io.Fileクラスの役割と非常によく似ています。

このプログラムの中心となるコードは以下の1行です。

File file = new File(args[0]);

つまり、Fileクラスのオブジェクトを生成するには、対象ファイルのパスをFileクラスのコンストラクタに渡すだけで良いのです。

fileオブジェクトを生成した後は、Fileクラスのメソッドを呼び出すことで、そのfileオブジェクトからファイル名やファイルサイズを取得できます。

ただし、この中心的なコードを使う際には、以下のようなチェックが必要です。

  1. args[0]が存在すること
    args[0]が存在しない場合、配列のインデックスアウトオブバウンド例外がスローされます。

  2. args[0]が一意であること
    プログラムの最初で、argsの長さを確認する必要があります。長さが1である場合にのみ、処理を進めます。

  3. 対象ファイルのパスが存在すること
    対象ファイルのパスが存在しない場合でも、fileオブジェクトの初期化時にはエラーは発生しません。しかし、file.exists()メソッドはfalseを返します。

これらのチェックを以下のように分けて実施します。

  • 1と2については、コマンドライン引数の入力チェックを行います。
  • 3については、ファイルの存在チェックを行います。

これらを踏まえることで、最終的に完成したプログラムが出来上がります。


このプログラムを通じて、java.io.Fileクラスの便利さを改めて実感しました。今後もこのような便利なクラスを活用して、より効率的なプログラムを作成していきたいと思います。