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.