HOWTO · Java

Verzeichnis in Java erstellen

In diesem Tutorial wird erläutert, wie Sie ein Verzeichnis in Java erstellen

Auf dieser Seite

Ein Verzeichnis ist eine Katalogisierungsstruktur des Dateisystems zum Speichern von Dateien, und das Erstellen eines Verzeichnisses ist eine häufige Aufgabe beim Umgang mit Dateien in Java. Das JDK bietet dafür zwei APIs – die älteren java.io.File-Methoden und die neueren java.nio.file.Files-Hilfsmethoden –, und Apache Commons IO stellt eine dritte Option bereit. Dieses Tutorial zeigt jeden Ansatz und die Verhaltensunterschiede, die bei der Auswahl wichtig sind.

Eine Java-Methode zum Erstellen von Verzeichnissen auswählen

Verwenden Sie für neuen Code in den meisten Fällen java.nio.file.Files. Rufen Sie Files.createDirectories(path) auf, wenn einige übergeordnete Verzeichnisse möglicherweise noch nicht existieren: Die Methode erstellt den gesamten Pfad in einem Aufruf und schlägt nicht fehl, nur weil das Verzeichnis bereits vorhanden ist. Rufen Sie stattdessen Files.createDirectory(path) auf, wenn ein bereits vorhandenes Ziel als Fehler behandelt werden soll. Die älteren Methoden File.mkdir() und File.mkdirs() melden den Erfolg nur über einen boolean, der leicht übersehen werden kann, während die Files-Methoden geprüfte Ausnahmen werfen, die das genaue Problem benennen. FileUtils.forceMkdir() ist nur in Codebases eine sinnvolle Wahl, die bereits von Apache Commons IO abhängen.

Die wichtigen Unterschiede liegen darin, wie jede Methode mit fehlenden übergeordneten Verzeichnissen und einem bereits vorhandenen Ziel umgeht:

Methode Fehlende übergeordnete Verzeichnisse Vorhandenes Zielverzeichnis Fehlersignal
File.mkdir() schlägt fehl, gibt false zurück gibt false zurück boolean-Rückgabewert
File.mkdirs() erstellt sie gibt false zurück boolean-Rückgabewert
Files.createDirectory() NoSuchFileException FileAlreadyExistsException geprüfte IOException-Untertypen
Files.createDirectories() erstellt sie kehrt normal zurück geprüfte IOException-Untertypen
FileUtils.forceMkdir() erstellt sie kehrt normal zurück IOException

Ein einzelnes Verzeichnis mit File.mkdir() erstellen

File.mkdir() erstellt genau ein Verzeichnis an dem Pfad, den die File-Instanz enthält. Es gibt nur dann true zurück, wenn das Verzeichnis tatsächlich erstellt wurde; es gibt false zurück, wenn der Name bereits vergeben ist, wenn das übergeordnete Verzeichnis nicht existiert oder wenn das Betriebssystem die Anfrage verweigert. Prüfen Sie daher immer den Rückgabewert, statt einen Erfolg anzunehmen.

Das folgende Programm erstellt ein Verzeichnis namens reports im Arbeitsverzeichnis und gibt das Ergebnis aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import java.io.File;

public class MkdirExample {
    public static void main(String[] args) {
        File dir = new File("reports");
        boolean created = dir.mkdir();
        System.out.println("mkdir() returned: " + created);
        System.out.println("Directory exists: " + dir.isDirectory());
    }
}
mkdir() returned: true
Directory exists: true

Ein false-Ergebnis sagt nichts über die Ursache aus – prüfen Sie anschließend dir.isDirectory(), wenn ein bereits vorhandenes Verzeichnis akzeptabel ist, oder wechseln Sie zu Files.createDirectory() für typisierte Fehler. mkdir() kann außerdem die ungeprüfte SecurityException werfen, wenn ein Security Manager den Schreibzugriff verweigert.

Einen Verzeichnisbaum mit File.mkdirs() erstellen

File.mkdirs() erstellt das Zielverzeichnis und jedes fehlende übergeordnete Verzeichnis entlang des Pfads in einem einzigen Aufruf:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import java.io.File;

public class MkdirsExample {
    public static void main(String[] args) {
        File dir = new File("reports/2026/october");
        boolean created = dir.mkdirs();
        System.out.println("mkdirs() returned: " + created);
        System.out.println("Directory exists: " + dir.isDirectory());
    }
}
mkdirs() returned: true
Directory exists: true

Beachten Sie, dass mkdirs() nur dann true zurückgibt, wenn das Verzeichnis zusammen mit allen erforderlichen übergeordneten Verzeichnissen erstellt wurde. Wird die Methode auf einem bereits vorhandenen Baum ausgeführt, gibt sie false zurück, obwohl nichts schiefgegangen ist, und ein false-Ergebnis verrät nicht, auf welcher Ebene ein Fehler aufgetreten ist. Prüfen Sie mit isDirectory(), wenn Erfolg einfach bedeutet, dass das Verzeichnis vorhanden ist.

Ein einzelnes Verzeichnis mit Files.createDirectory() erstellen

Files.createDirectory(path) ist das NIO-Äquivalent zu mkdir(): Es erstellt genau ein Verzeichnis und schlägt fehl, wenn das übergeordnete Verzeichnis fehlt. Da die Fehler geprüfte Ausnahmen sind, zwingt der Compiler Sie, sie zu behandeln, und der Ausnahmetyp identifiziert das Problem – FileAlreadyExistsException, wenn der Name vergeben ist, und NoSuchFileException, wenn das übergeordnete Verzeichnis fehlt.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateDirectoryExample {
    public static void main(String[] args) {
        Path path = Paths.get("logs");
        try {
            Files.createDirectory(path);
            System.out.println("Created directory: " + path);
        } catch (FileAlreadyExistsException e) {
            System.out.println("Already exists: " + path);
        } catch (IOException e) {
            System.out.println("Could not create directory: " + e);
        }
    }
}
Created directory: logs

Das separate Abfangen von FileAlreadyExistsException hält den häufigen Fall „bereits vorhanden“ still, während andere IOException-Untertypen weiterhin als Fehler sichtbar werden.

Einen Verzeichnisbaum mit Files.createDirectories() erstellen

Files.createDirectories(path) erstellt das Ziel und jedes fehlende übergeordnete Verzeichnis in einem Aufruf und kehrt – anders als mkdirs() – normal zurück, wenn das Verzeichnis bereits existiert. Das ist der empfohlene Aufruf, wenn Sie einfach nur benötigen, dass der Pfad vorhanden ist. Die Methode wirft dennoch FileAlreadyExistsException, wenn eine reguläre Datei den Pfad belegt, und andere IOException-Untertypen bei echten Fehlern wie verweigerten Berechtigungen.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateDirectoriesExample {
    public static void main(String[] args) {
        Path path = Paths.get("data/archive/2026");
        try {
            Files.createDirectories(path);
            System.out.println("Directory ready: " + path);
        } catch (IOException e) {
            System.out.println("Could not create directory: " + e);
        }
    }
}
Directory ready: data/archive/2026

FileUtils.forceMkdir() aus Apache Commons IO verwenden

FileUtils.forceMkdir() ist nicht Teil des JDK; es befindet sich in Apache Commons IO, daher benötigt das Projekt die Abhängigkeit commons-io (beispielsweise das Artefakt commons-io:commons-io in Maven oder Gradle). Da die Bibliothek nicht zum Standard-Klassenpfad gehört, wird der Aufruf inline gezeigt statt als ausführbares Beispiel:

FileUtils.forceMkdir(new File("data/archive/2026"));

Wie createDirectories() erstellt es das Verzeichnis plus alle fehlenden übergeordneten Verzeichnisse und kehrt still zurück, wenn das Verzeichnis bereits existiert – der Namensbestandteil „force“ bezieht sich dabei auf das Erstellen erforderlicher Elternverzeichnisse, nicht auf das Überschreiben von Inhalten. Es wirft IOException, wenn eine Nicht-Verzeichnis-Datei den Pfad belegt oder das Verzeichnis nicht erstellt werden kann. Bevorzugen Sie die Standard-Files-Methoden, es sei denn, die Codebase verwendet bereits Commons IO.