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.0 | Java 7(NIO.2)以降 |
目的 | パス操作・参照中心 | 柔軟な構文解析・ファイル操作 |
機能 | 存在確認・削除など | 読み書き・コピー・移動など |
読み書き | 不可(自前でStream要) | Filesと組み合わせて可能 |
例外処理 | 少なめ(戻り値で判定) | 詳細な例外(IOException) |
Path / Paths / Files の違い整理
java.nio.file パッケージには名前が似ていて混乱しやすい3つのクラスがあります。ここでそれぞれの役割を明確にしておきましょう。
クラス名 | 役割 | 主な用途 | 特徴 |
Path | パス(住所)の表現 | Paths.get(…) で生成 | インタフェース。パス情報だけを持つ |
Paths | Path を生成する補助役 | 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の併存状況を理解し、それぞれの使い所を正しく押さえることが求められます。