HOWTO · Java

Crea directory in Java

Questo tutorial spiega come creare una directory in Java

In questa pagina

Una directory è una struttura di catalogazione del file system per l’archiviazione dei file, e crearne una è un’operazione comune nella gestione dei file in Java. Il JDK offre due API per questo compito — i metodi tradizionali di java.io.File e i più recenti helper di java.nio.file.Files — e Apache Commons IO aggiunge una terza opzione. Questo tutorial mostra ogni approccio e le differenze di comportamento che contano nella scelta.

Scegli un metodo Java per creare directory

Per la maggior parte del codice nuovo, preferisci java.nio.file.Files. Chiama Files.createDirectories(path) quando alcune directory padre potrebbero non esistere ancora: crea l’intero percorso in una sola chiamata e non fallisce solo perché la directory è già presente. Chiama invece Files.createDirectory(path) quando una destinazione già esistente deve essere trattata come un errore. I più vecchi metodi File.mkdir() e File.mkdirs() segnalano il successo solo tramite un boolean, facile da ignorare, mentre i metodi Files lanciano eccezioni checked che indicano il problema esatto. FileUtils.forceMkdir() è una scelta ragionevole solo in codebase che dipendono già da Apache Commons IO.

Le differenze importanti riguardano il modo in cui ogni metodo gestisce le directory padre mancanti e una destinazione già esistente:

Metodo Padri mancanti Directory di destinazione esistente Segnale di errore
File.mkdir() fallisce, restituisce false restituisce false valore di ritorno boolean
File.mkdirs() le crea restituisce false valore di ritorno boolean
Files.createDirectory() NoSuchFileException FileAlreadyExistsException sottotipi checked di IOException
Files.createDirectories() le crea ritorna normalmente sottotipi checked di IOException
FileUtils.forceMkdir() le crea ritorna normalmente IOException

Crea una singola directory con File.mkdir()

File.mkdir() crea esattamente una directory nel percorso contenuto nell’istanza File. Restituisce true solo quando ha effettivamente creato la directory; restituisce false quando il nome è già occupato, quando la directory padre non esiste o quando il sistema operativo nega la richiesta, quindi verifica sempre il valore di ritorno invece di dare il successo per scontato.

Il programma seguente crea una directory chiamata reports nella directory di lavoro e stampa il risultato:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

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

Un risultato false non dice nulla sulla causa — controlla dir.isDirectory() in seguito quando una directory preesistente è accettabile, oppure passa a Files.createDirectory() per errori tipizzati. mkdir() può anche lanciare l’eccezione unchecked SecurityException quando un security manager nega l’accesso in scrittura.

Crea un albero di directory con File.mkdirs()

File.mkdirs() crea la directory di destinazione e ogni padre mancante lungo il percorso in una sola chiamata:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

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

Nota che mkdirs() restituisce true solo quando ha creato la directory insieme a tutti i padri necessari. Eseguirlo su un albero esistente restituisce false anche se nulla è andato storto, e un risultato false non indica quale livello è fallito. Verifica con isDirectory() quando il successo significa semplicemente che la directory è presente.

Crea una singola directory con Files.createDirectory()

Files.createDirectory(path) è l’equivalente NIO di mkdir(): crea esattamente una directory e fallisce quando il padre manca. Poiché i suoi errori sono eccezioni checked, il compilatore ti obbliga a gestirli, e il tipo di eccezione identifica il problema — FileAlreadyExistsException quando il nome è occupato e NoSuchFileException quando il padre manca.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

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

Catturare FileAlreadyExistsException separatamente mantiene silenzioso il caso comune “è già presente”, mentre gli altri sottotipi di IOException emergono comunque come errori.

Crea un albero di directory con Files.createDirectories()

Files.createDirectories(path) crea la destinazione e ogni padre mancante in una sola chiamata e, a differenza di mkdirs(), ritorna normalmente quando la directory esiste già — la chiamata raccomandata quando hai semplicemente bisogno che il percorso sia presente. Lancia comunque FileAlreadyExistsException quando un file normale occupa il percorso e altri sottotipi di IOException in caso di errori reali come permessi negati.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

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

Usa FileUtils.forceMkdir() di Apache Commons IO

FileUtils.forceMkdir() non fa parte del JDK; si trova in Apache Commons IO, quindi il progetto ha bisogno della dipendenza commons-io (ad esempio, l’artefatto commons-io:commons-io in Maven o Gradle). Poiché la libreria non è nel classpath standard, la chiamata è mostrata inline invece che come esempio eseguibile:

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

Come createDirectories(), crea la directory più eventuali padri mancanti e ritorna silenziosamente quando la directory esiste già — nonostante il nome, “force” si riferisce alla creazione dei padri necessari, non alla sovrascrittura di qualcosa. Lancia IOException quando un file che non è una directory occupa il percorso o quando la directory non può essere creata. Preferisci i metodi standard di Files a meno che il codebase non usi già Commons IO.