Javaでファイル操作を行う際、データを保存するための「フォルダ(ディレクトリ)」をプログラムから自動的に作成したい場面は頻繁にあります。
mkdir と mkdirs は何が違うの?」「深い階層を一気に作りたい時はどうすればいい?」といった疑問を持つ方も多いでしょう。また、すでに存在するフォルダを上書きしてしまわないための「存在チェック」も欠かせません。
この記事では、Javaにおけるフォルダ作成の基本から、階層構造の一括作成、そして現在の開発現場で推奨される java.nio.file.Files を使ったモダンな実装方法まで、サンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
フォルダ作成の基本:Fileクラスを使う方法
まずは、Javaの黎明期から使われている java.io.File クラスを使った基本的な方法を見ていきましょう。
シンプルですが、戻り値で成功・失敗を判定する必要があるなど、少しクセがあります。
1階層だけ作成する mkdir メソッド
指定したパスのフォルダを1つだけ作成します。親フォルダが存在しない場合は作成に失敗します。
import java.io.File;
public class CreateDirExample {
public static void main(String[] args) {
// 作成したいフォルダのパスを指定
File newDir = new File("C:/data/log");
// フォルダを作成
if (newDir.mkdir()) {
System.out.println("フォルダの作成に成功しました。");
} else {
System.out.println("フォルダの作成に失敗しました(親フォルダがない、または既に存在します)。");
}
}
}
実行結果 (成功時)
フォルダの作成に成功しました。
new File("パス") でファイルオブジェクトを作成し、.mkdir() を呼び出します。 戻り値は boolean で、作成できれば true、失敗すれば false が返ります。
重要な注意点として、例えば C:/data というフォルダが存在しない状態で C:/data/log を作ろうとすると、エラーにはならず単に false が返り、フォルダは作成されません。
深い階層を一気に作成する mkdirs メソッド
親フォルダも含めて、パスに含まれるすべてのフォルダを作成したい場合は mkdirs を使います。
実務ではこちらを使うことの方が多いでしょう。
import java.io.File;
public class CreateDirsExample {
public static void main(String[] args) {
// 深い階層のパスを指定
File deepDir = new File("C:/data/2026/05/01");
// 親フォルダも含めて一括作成
if (deepDir.mkdirs()) {
System.out.println("階層フォルダの作成に成功しました。");
} else {
System.out.println("作成に失敗、もしくは既に存在します。");
}
}
}
mkdirs()(末尾にsが付く)を使うと、C:/data や C:/data/2026 が存在しなくても、それらを自動的に作成した上で、最終的な 01 フォルダまで作り上げてくれます。
非常に便利ですが、意図しない場所にフォルダを作ってしまわないよう、パスの指定には注意が必要です。
【推奨】モダンな方法:Filesクラス(NIO.2)を使う
Java 7から導入された java.nio.file パッケージ(NIO.2)は、より強力で安全なファイル操作を提供します。
現在の新規開発では、前述の File クラスよりも、こちらの Files クラスを使うのが一般的です。
Files.createDirectory で作成する
Java 11以降では Paths.get() よりも直感的な Path.of() が推奨されています。
import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
public class NioCreateDirExample {
public static void main(String[] args) {
// Pathオブジェクトを作成(Java 11以降の推奨記法)
Path path = Path.of("C:", "data", "nio_test");
try {
// フォルダを作成
Files.createDirectory(path);
System.out.println("フォルダを作成しました。");
} catch (FileAlreadyExistsException e) {
System.err.println("既にフォルダが存在します: " + e.getMessage());
} catch (IOException e) {
System.err.println("作成エラー: " + e.getMessage());
}
}
}
Path.of() でパスを定義し、Files.createDirectory(path) で作成します。
従来の mkdir との最大の違いは、失敗した時に例外(IOException)を投げることです。
これにより、「なぜ作成できなかったのか(権限がないのか、既に存在するのか)」を詳しく知ることができます。
Files.createDirectories で階層作成
mkdirs と同様に、親ディレクトリも含めて作成するメソッドも用意されています。
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class NioCreateDirsExample {
public static void main(String[] args) {
Path deepPath = Path.of("C:", "data", "nio", "deep", "dir");
try {
// 階層ごと一括作成
// 既に存在していても例外を投げないので安全かつ簡潔
Files.createDirectories(deepPath);
System.out.println("階層フォルダを作成しました。");
} catch (IOException e) {
e.printStackTrace();
}
}
}
特筆すべきは、Files.createDirectories は 「既にフォルダが存在していてもエラーにならない(例外を投げない)」 という親切設計になっている点です。
そのため、事前の存在チェックを省略しても安全に動作します。
フォルダ作成手法の使い分けクイック表
どのメソッドを使えばいいか迷ったときは、以下の表を参考にしてください。
| メソッド | 階層作成 | 既存時の挙動 | 失敗時の通知 | 推奨度 |
|---|---|---|---|---|
File.mkdir() |
× | false を返す |
false (理由不明) | ★☆☆ |
File.mkdirs() |
○ | false を返す |
false (理由不明) | ★★☆ |
Files.createDirectory() |
× | 例外を投げる | IOException |
★★☆ |
Files.createDirectories() |
○ | 何もしない(正常) | IOException |
★★★ |
基本的には、最も安全でコードも短くなる Files.createDirectories() を使うのがベストプラクティスです。
フォルダの存在チェックを行う方法(なければ作成)
古い File クラスや createDirectory を使う場合、「フォルダがなければ作成する」というロジックを組むのが定石です。
exists メソッドによるチェック
import java.io.File;
public class CheckAndCreateExample {
public static void main(String[] args) {
File dir = new File("C:/data/check_dir");
// 存在しない場合のみ作成
if (!dir.exists()) {
dir.mkdirs();
System.out.println("新しく作成しました。");
} else {
System.out.println("既に存在するため作成しませんでした。");
}
}
}
exists() メソッドは、ファイルやフォルダが存在する場合に true を返します。
! で反転させることで、「存在しないなら作る」という処理を実現しています。
これはログ出力先や、一時ファイル置き場の初期化処理などで頻繁に使われるパターンです。
Javaのスキルを活かして年収を上げる方法
以上、Javaでのフォルダ作成や存在チェックなどについて解説してきました。
Javaエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



