EMZETT.
Login

Create Files

Kurz: Eine neue, leere Datei im Dateisystem anlegen — z. B. mit File.createNewFile() oder Files.createFile(path).

Genauer: createNewFile() gibt false zurück (statt einer Exception), wenn die Datei bereits existiert — leicht zu übersehen, wenn man nur auf Exceptions prüft. Files.createFile(path) aus java.nio.file wirft dagegen eine FileAlreadyExistsException, was Fehler beim Testen eher auffallen lässt.

Im Detail

// Ältere API (java.io)
File datei = new File("neu.txt");
boolean erstellt = datei.createNewFile(); // false = existierte schon, KEINE Exception
 
// Moderne API (java.nio.file) - seit Java 7
Path pfad = Path.of("neu2.txt");
try {
    Files.createFile(pfad); // wirft FileAlreadyExistsException, wenn Datei schon existiert
} catch (FileAlreadyExistsException e) {
    System.out.println("Existiert bereits");
} catch (IOException e) {
    System.err.println("Fehler: " + e.getMessage());
}
 
// Verzeichnisse anlegen (Elternordner müssen ggf. mit erstellt werden)
Files.createDirectories(Path.of("ordner/unterordner"));

Die neuere java.nio.file-API (Path/Files) gilt heute als der bessere Standard gegenüber der älteren java.io.File-Klasse: aussagekräftigere Exceptions statt stiller boolean-Rückgaben, bessere Unterstützung für symbolische Links und Dateiattribute, und Files.createDirectories() legt bei Bedarf gleich die komplette Ordnerstruktur an (im Gegensatz zu mkdir(), das nur einen einzelnen Ordner erzeugt und scheitert, wenn der Elternordner fehlt).

Datei mit Inhalt in einem Schritt erzeugen

Oft soll eine Datei nicht nur angelegt, sondern gleich mit Inhalt befüllt werden — dafür eignet sich Files.writeString() (seit Java 11) besser als ein separates createFile() + write():

Path pfad = Path.of("konfiguration.txt");
Files.writeString(pfad, "einstellung=wert\n", StandardOpenOption.CREATE); // erzeugt + schreibt in einem Schritt

Temporäre Dateien

Für Dateien, die nur während der Programmlaufzeit gebraucht werden (z. B. Zwischenergebnisse), bietet Java Files.createTempFile() — das Betriebssystem wählt automatisch einen geeigneten temporären Speicherort:

Path temp = Files.createTempFile("verarbeitung", ".tmp");
temp.toFile().deleteOnExit(); // wird beim JVM-Beenden automatisch gelöscht

Berechtigungsfehler abfangen

Neben “Datei existiert bereits” ist eine fehlende Schreibberechtigung im Zielverzeichnis die zweithäufigste Fehlerquelle — Files.createFile() wirft dafür eine AccessDeniedException (eine Unterklasse von IOException), die sich gezielt abfangen lässt, um dem Nutzer eine verständlichere Fehlermeldung als einen rohen Stacktrace zu zeigen.

try-with-resources bei Datei-Operationen

Auch wenn createFile() selbst keine Ressource offen lässt, folgen direkt anschließende Schreiboperationen fast immer dem try-with-resources-Muster, damit Dateihandles zuverlässig geschlossen werden, selbst wenn eine Exception auftritt:

Path pfad = Files.createFile(Path.of("log.txt"));
try (BufferedWriter writer = Files.newBufferedWriter(pfad)) {
    writer.write("erster Eintrag");
} // writer wird automatisch geschlossen, auch bei einer Exception

Ohne try-with-resources müsste das Schließen manuell in einem finally-Block passieren — leicht zu vergessen, besonders wenn mehrere Ressourcen gleichzeitig offen sind.

Siehe auch: Files, Write Files, Exceptions