HOWTO · Java

Criar diretório em Java

Este tutorial discute como criar um diretório em Java

Nesta página

Um diretório é uma estrutura de catalogação do sistema de arquivos para armazenar arquivos, e criar um é uma tarefa comum de manipulação de arquivos em Java. O JDK oferece duas APIs para isso — os métodos legados de java.io.File e os auxiliares mais recentes de java.nio.file.Files — e o Apache Commons IO adiciona uma terceira opção. Este tutorial mostra cada abordagem e as diferenças de comportamento que importam na hora de escolher uma.

Escolha um método de criação de diretórios em Java

Para a maioria dos códigos novos, prefira java.nio.file.Files. Chame Files.createDirectories(path) quando alguns diretórios pais ainda não existirem: ele cria todo o caminho em uma única chamada e não falha apenas porque o diretório já está lá. Chame Files.createDirectory(path) quando um destino já existente deve ser tratado como falha. Os métodos mais antigos File.mkdir() e File.mkdirs() informam o sucesso apenas por meio de um boolean, que é fácil de ignorar, enquanto os métodos de Files lançam exceções verificadas que nomeiam o problema exato. FileUtils.forceMkdir() é uma escolha razoável apenas em codebases que já dependem do Apache Commons IO.

As diferenças importantes estão em como cada método lida com diretórios pais ausentes e com um destino já existente:

Método Pais ausentes Diretório de destino existente Sinal de falha
File.mkdir() falha, retorna false retorna false valor de retorno boolean
File.mkdirs() cria os pais retorna false valor de retorno boolean
Files.createDirectory() NoSuchFileException FileAlreadyExistsException subtipos verificados de IOException
Files.createDirectories() cria os pais retorna normalmente subtipos verificados de IOException
FileUtils.forceMkdir() cria os pais retorna normalmente IOException

Crie um único diretório com File.mkdir()

File.mkdir() cria exatamente um diretório no caminho mantido pela instância de File. Ele retorna true somente quando realmente criou o diretório; retorna false quando o nome já está em uso, quando o diretório pai não existe ou quando o sistema operacional nega a solicitação, portanto sempre teste o valor de retorno em vez de presumir o sucesso.

O programa a seguir cria um diretório chamado reports no diretório de trabalho e imprime o resultado:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

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

Um resultado false não diz nada sobre a causa — verifique dir.isDirectory() depois, quando um diretório pré-existente for aceitável, ou mude para Files.createDirectory() para obter falhas tipadas. mkdir() também pode lançar a exceção não verificada SecurityException quando um gerenciador de segurança nega a permissão de escrita.

Crie uma árvore de diretórios com File.mkdirs()

File.mkdirs() cria o diretório de destino e todos os pais ausentes ao longo do caminho em uma única chamada:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

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

Observe que mkdirs() retorna true somente quando criou o diretório junto com todos os pais necessários. Executá-lo em uma árvore já existente retorna false, embora nada tenha dado errado, e um resultado false não informa qual nível falhou. Verifique com isDirectory() quando sucesso significa simplesmente que o diretório está lá.

Crie um único diretório com Files.createDirectory()

Files.createDirectory(path) é o equivalente NIO de mkdir(): cria exatamente um diretório e falha quando o pai está ausente. Como suas falhas são exceções verificadas, o compilador obriga você a tratá-las, e o tipo da exceção identifica o problema — FileAlreadyExistsException quando o nome já está em uso e NoSuchFileException quando o pai está ausente.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

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

Capturar FileAlreadyExistsException separadamente mantém o caso comum de “já existe” silencioso, enquanto outros subtipos de IOException continuam a surgir como falhas.

Crie uma árvore de diretórios com Files.createDirectories()

Files.createDirectories(path) cria o destino e todos os pais ausentes em uma única chamada e, ao contrário de mkdirs(), retorna normalmente quando o diretório já existe — a chamada recomendada quando você simplesmente precisa que o caminho esteja lá. Ele ainda lança FileAlreadyExistsException quando um arquivo comum ocupa o caminho e outros subtipos de IOException em falhas reais, como permissões negadas.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

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

Use FileUtils.forceMkdir() do Apache Commons IO

FileUtils.forceMkdir() não faz parte do JDK; ele está no Apache Commons IO, portanto o projeto precisa da dependência commons-io (por exemplo, o artefato commons-io:commons-io no Maven ou no Gradle). Como a biblioteca não está no classpath padrão, a chamada é mostrada inline em vez de como um exemplo executável:

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

Assim como createDirectories(), ele cria o diretório e todos os pais ausentes e retorna silenciosamente quando o diretório já existe — apesar do nome, “force” se refere à criação dos pais necessários, não a sobrescrever algo. Ele lança IOException quando um arquivo que não é diretório ocupa o caminho ou quando o diretório não pode ser criado. Prefira os métodos padrão de Files, a menos que o codebase já use o Commons IO.