Java Gold SE11対策:FileとPathの基本 ― ファイル操作の出発点

アイキャッチ画像

Java Gold SE11 試験では、I/O(入力・出力)に関する知識も幅広く問われます。とくに File(旧来のAPI)と Path / Files(NIO以降のAPI)の違いや使い分けを理解しているかは、頻出のポイントです。

この記事では、まずファイルやディレクトリの扱いにおける「入り口」として、File クラスと Path クラスの使い方、代表的なメソッド、出題されやすい注意点を中心に解説します。

File クラス(java.io.File

特徴

  • Java 1.0 から存在する旧来のファイル操作API。
  • ファイルやディレクトリの 参照・操作 が目的(読み書き処理は別)。
  • 「存在確認・作成・削除・リネーム」などの処理が可能。

主なコンストラクタ

File file1 = new File(“test.txt”);

File file2 = new File(“data”, “test.txt”); // ディレクトリ名+ファイル名

よく使うメソッド

メソッド説明
exists()ファイルまたはディレクトリの存在確認
isFile()通常のファイルかどうか
isDirectory()ディレクトリかどうか
createNewFile()空のファイルを新規作成(IOException 発生)
delete()ファイル削除(成功 or 失敗 → boolean)
length()ファイルサイズ(バイト単位)
renameTo(File)ファイル名変更や移動

例:ファイルの存在確認と新規作成

File file = new File(“sample.txt”);

if (!file.exists()) {

    file.createNewFile();  // IOException に注意

}

試験ポイント

  • createNewFile() は例外をスローする可能性あり(戻り値は boolean だが、例外発生あり)。
  • delete() は失敗しても例外を出さず、false を返すだけ。

Path / Paths クラス(java.nio.file

特徴

  • Java 7 で追加された NIO.2 API。
  • より柔軟で安全なファイル・ディレクトリ操作が可能。
  • 実際のファイル操作は Files クラスと連携して行う。

Path の生成

Path path = Paths.get(“sample.txt”);

Path path2 = Paths.get(“data”, “test.txt”);

Paths.get(…) は Java 11 以降では Path.of(…) と同義。

File vs Path の違いまとめ

観点File (java.io)Path (java.nio.file)
歴史Java 1.0Java 7(NIO.2)以降
目的パス操作・参照中心柔軟な構文解析・ファイル操作
機能存在確認・削除など読み書き・コピー・移動など
読み書き不可(自前でStream要)Filesと組み合わせて可能
例外処理少なめ(戻り値で判定)詳細な例外(IOException)

Path / Paths / Files の違い整理

java.nio.file パッケージには名前が似ていて混乱しやすい3つのクラスがあります。ここでそれぞれの役割を明確にしておきましょう。

クラス名役割主な用途特徴
Pathパス(住所)の表現Paths.get(…) で生成インタフェース。パス情報だけを持つ
PathsPath を生成する補助役Paths.get(…)static メソッドのみ。new はできない
Files実体ファイルの操作Files.exists(path)等読み書き・作成・削除など本体操作を担う

例:3者の連携フロー

Path path = Paths.get(“data”, “sample.txt”); // PathsでPathを生成

if (!Files.exists(path)) {

    Files.createFile(path);                 // Filesでファイル作成

}

試験での注意点

  • Path はインタフェース(new Path() できない)
  • Paths.get(…) ≒ Path.of(…)(Java 11 以降)
  • 実体操作は Files を通じて行う(Path 単体では不可)

Files クラスとの連携による Path 操作

ファイル存在確認と作成

Path path = Paths.get(“sample.txt”);

if (!Files.exists(path)) {

    Files.createFile(path);  // IOException

}

ディレクトリ作成(単層)

Path dir = Paths.get(“data”);

Files.createDirectory(dir);  // 親ディレクトリが必要

ディレクトリ作成(複数階層)

Path nestedDir = Paths.get(“parent”, “child”, “grandchild”);

Files.createDirectories(nestedDir);  // 存在しない中間ディレクトリも自動作成

createDirectories() は中間階層も含めて自動で作成してくれるが、createDirectory() は親が存在しないと失敗します。

試験で引っかかりやすいポイント

  • createNewFile():既に存在するファイルには false を返す。例外が出るのは I/O エラー時。
  • delete():失敗しても例外を投げず false を返すだけ。
  • Path はファイルの実体操作ができない(Files と連携が必須)。
  • Paths.get(…) は String… 型なので複数階層に柔軟対応可能。

おわりに

今回は Java I/O の第一歩として、File / Path / Files クラスの違いと基本的なファイル操作について整理しました。SE11 Goldでは、旧APIと新APIの併存状況を理解し、それぞれの使い所を正しく押さえることが求められます。