記事内にはプロモーションが含まれています

【Java】フォルダ作成の完全ガイド!mkdirとmkdirsの違いや存在チェックまで解説

【Java】フォルダ作成の完全ガイド!mkdirとmkdirsの違いや存在チェックまで解説 Java

Javaでファイル操作を行う際、データを保存するための「フォルダ(ディレクトリ)」をプログラムから自動的に作成したい場面は頻繁にあります。

しかし、Javaにはフォルダを作成する方法が新旧合わせていくつか存在し、「mkdirmkdirs は何が違うの?」「深い階層を一気に作りたい時はどうすればいい?」といった疑問を持つ方も多いでしょう。

また、すでに存在するフォルダを上書きしてしまわないための「存在チェック」も欠かせません。

この記事では、Javaにおけるフォルダ作成の基本から、階層構造の一括作成、そして現在の開発現場で推奨される java.nio.file.Files を使ったモダンな実装方法まで、サンプルコード付きで徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • 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:/dataC:/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のスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Javaエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなJavaの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)