revise sua seleção da resposta correta. A solução proposta por JigarJoshi é enganosa. Não resolve o problema corretamente (veja meu comentário). A solução (simples) proposta pelo Bozho é muito melhor.
mwhs
mkdiré idempotente em java. A implementação verificará se o diretório existe para você e somente o criará se ele não existir.
mwhs
Respostas:
461
Após ~ 7 anos, atualizá-lo-ei para uma melhor abordagem, sugerida pelo Bozho.
newFile("/path/directory").mkdirs();
Descontinuada:
File theDir =newFile("new folder");// if the directory does not exist, create itif(!theDir.exists()){System.out.println("creating directory: "+ theDir.getName());boolean result =false;try{
theDir.mkdir();
result =true;}catch(SecurityException se){//handle it}if(result){System.out.println("DIR created");}}
-1: Essa é realmente uma técnica muito ruim para criar um diretório. O acesso ao FS não está reservado para um recurso dedicado. Entre if(!theDir.exists())e theDir.mkdir()o status poderia ter mudado, assim como entre a não criação do diretório (por causa do existsretorno true) e a necessidade dele. O resultado do método existsnunca deve ser usado para decidir se deseja criar um diretório ou não. Basta ligar mkdir, nenhuma exceção será lançada se ela já existir.
mwhs
4
@mwhs Entendo que é melhor não verificar o diretório, mas não entendo sua justificativa (segunda parte). O status não pode mudar entre chamar mkdire precisar do diretório também? Suponho que você quis dizer que algum outro processo exclui o diretório.
Episodex 17/07/2015
2
Os diretórios @Episodex são recursos compartilhados. Só não use a solução acima, ela está errada por diferentes razões. Não está claro como o OP poderia ter pensado que esta é a resposta correta. Se você deseja asserções sobre recursos de E / S, precisa usar bloqueios, não booleanos.
mwhs
44
@mhws Eu sei que este post tem alguns meses, mas se você observar a mkdirsimplementação, a partir do código-fonte, a primeira coisa que será chamada é if (exists()) { return false; }. A implementação em si verifica primeiro se o diretório já existe, então a única coisa que esta resposta está errada, talvez, é verificar essa condição 2x. Não é tão ruim quanto você está imaginando.
Michael Hogenson
5
No Java 7, você provavelmente deve usar os métodos Filescomo na resposta mais recente de Benoit Blanchon. (Esta resposta parece ter sido escrito antes de Java 7.)
Tijolo
504
newFile("/path/directory").mkdirs();
Aqui "diretório" é o nome do diretório que você deseja criar / existir.
Resposta muito melhor que a selecionada como correta pelo OP. A verificação da existência do diretório antes de criá-lo deve se tornar um anti-padrão bem conhecido.
mwhs
7
e se o diretório já existir? Seria substituir? ou pule o processo.
@Tascalator não está claro na documentação que você pode elaborar? Também a resposta deve ser complementada com a resposta à what if the directory is already exists? It would do overwriting? or skip the process.pergunta.
mrgloom
3
é claro:Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
Eu acho que essa opção não existia no momento das perguntas e respostas originais, mas essa deveria ser a resposta daqui para frente, eu acho.
tijolo
6
Também seria bom observar que:Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
Keith OYS
Obrigado por apontar a diferença entre createDirectory e createDirectories. Acho que é uma má escolha de nome.
seinecle
(2019) Eu usei Files.createDirectory (Paths.get (directory.toString ())); onde diretório é um objeto de arquivo. Não se esqueça de capturar sua IOException
Cria um diretório criando todos os diretórios pai inexistentes primeiro. Diferente do método createDirectory, uma exceção não será lançada se o diretório não puder ser criado porque já existe. O parâmetro attrs é um atributo de arquivo opcional para definir atomicamente ao criar os diretórios inexistentes. Cada atributo de arquivo é identificado por seu nome. Se mais de um atributo com o mesmo nome estiver incluído na matriz, todos, exceto a última ocorrência, serão ignorados.
Se esse método falhar, poderá ser feito após a criação de alguns, mas não todos, dos diretórios pai.
Como mencionado no comentário de @mwhs na resposta de Jigar Joshi, verificar a existência primeiro não é apenas não necessário, mas também uma péssima idéia.
Bdoserror
4
Embora esta pergunta tenha sido respondida. Gostaria de colocar algo extra, ou seja, se existe um arquivo com o nome do diretório que você está tentando criar, isso deve gerar um erro. Para futuros visitantes.
publicstaticvoid makeDir(){File directory =newFile(" dirname ");if(directory.exists()&& directory.isFile()){System.out.println("The dir with name could not be"+" created as it is a normal file");}else{try{if(!directory.exists()){
directory.mkdir();}String username =System.getProperty("user.name");String filename =" path/"+ username +".txt";//extension if you need one}catch(IOException e){System.out.println("prompt for error");}}}
Como mencionado no comentário de @mwhs na resposta de Jigar Joshi, verificar a existência primeiro não é apenas não necessário, mas também uma péssima idéia.
Bdoserror
4
Arrumado e limpo:
import java.io.File;publicclassRevCreateDirectory{publicvoid revCreateDirectory(){//To create single directory/folderFile file =newFile("D:\\Directory1");if(!file.exists()){if(file.mkdir()){System.out.println("Directory is created!");}else{System.out.println("Failed to create directory!");}}//To create multiple directories/foldersFile files =newFile("D:\\Directory2\\Sub2\\Sub-Sub2");if(!files.exists()){if(files.mkdirs()){System.out.println("Multiple directories are created!");}else{System.out.println("Failed to create multiple directories!");}}}}
Só queria apontar para todos que ligavam File.mkdir()ou File.mkdirs()ter cuidado com o Fileobjeto é um diretório e não um arquivo. Por exemplo, se você chamar mkdirs()o caminho /dir1/dir2/file.txt, ele criará uma pasta com o nome file.txtque provavelmente não é o que você queria. Se você estiver criando um novo arquivo e também desejar criar automaticamente pastas pai, poderá fazer algo assim:
Assim funciona para mim um diretório único ou mais ou mais: precisa importar java.io.File;
/ * digite o código abaixo para adicionar um diretório dir1 ou verifique se existe dir1, se não existir, portanto, crie o mesmo com dir2 e dir3 * /
File filed =newFile("C:\\dir1");if(!filed.exists()){if(filed.mkdir()){System.out.println("directory is created");}}else{System.out.println("directory exist");}File filel =newFile("C:\\dir1\\dir2");if(!filel.exists()){if(filel.mkdir()){System.out.println("directory is created");}}else{System.out.println("directory exist");}File filet =newFile("C:\\dir1\\dir2\\dir3");if(!filet.exists()){if(filet.mkdir()){System.out.println("directory is created");}}else{System.out.println("directory exist");}
Como mencionado no comentário de @mwhs na resposta de Jigar Joshi, verificar a existência primeiro não é apenas não necessário, mas também uma péssima idéia.
Bdoserror
0
se você quiser ter certeza de que foi criado, então:
porque mkDir() retorna um booleano, e os findbugs irão chorar por ele se você não usar a variável. Também não é bom ...
mkDir()retorna apenas verdadeiro se o mkDir()cria. Se o diretório existir, ele retornará false; portanto, para verificar o diretório que você criou, chame apenasexists() se mkDir()retornar false.
assertThat()irá verificar o resultado e falhará se exists()retornar falso. ofc, você pode usar outras coisas para lidar com o diretório não criado.
publicclassTest1{publicstaticvoid main(String[] args){String path =System.getProperty("user.home");File dir=newFile(path+"/new folder");if(dir.exists()){System.out.println("A folder with name 'new folder' is already exist in the path "+path);}else{
dir.mkdir();}}}
Como mencionado no comentário de @mwhs na resposta de Jigar Joshi, verificar a existência primeiro não é apenas não necessário, mas também uma péssima idéia.
Bdoserror
-7
Você também pode consultar a função makdir () para criar um novo diretório em uma pasta onde desejar.
mkdir
é idempotente em java. A implementação verificará se o diretório existe para você e somente o criará se ele não existir.Respostas:
Após ~ 7 anos, atualizá-lo-ei para uma melhor abordagem, sugerida pelo Bozho.
Descontinuada:
fonte
if(!theDir.exists())
etheDir.mkdir()
o status poderia ter mudado, assim como entre a não criação do diretório (por causa doexists
retornotrue
) e a necessidade dele. O resultado do métodoexists
nunca deve ser usado para decidir se deseja criar um diretório ou não. Basta ligarmkdir
, nenhuma exceção será lançada se ela já existir.mkdir
e precisar do diretório também? Suponho que você quis dizer que algum outro processo exclui o diretório.mkdirs
implementação, a partir do código-fonte, a primeira coisa que será chamada éif (exists()) { return false; }
. A implementação em si verifica primeiro se o diretório já existe, então a única coisa que esta resposta está errada, talvez, é verificar essa condição 2x. Não é tão ruim quanto você está imaginando.Files
como na resposta mais recente de Benoit Blanchon. (Esta resposta parece ter sido escrito antes de Java 7.)Aqui "diretório" é o nome do diretório que você deseja criar / existir.
fonte
what if the directory is already exists? It would do overwriting? or skip the process.
pergunta.Returns: true if and only if the directory was created, along with all necessary parent directories; false otherwise
Com o Java 7, você pode usar
Files.createDirectories()
.Por exemplo:
fonte
Unlike the createDirectory method, an exception is not thrown if the directory could not be created because it already exists
directory.toPath()
isso.Você pode tentar o FileUtils # forceMkdir
Esta biblioteca possui muitas funções úteis.
fonte
mkdir vs mkdirs
Se você deseja criar um único diretório, use
mkdir
Se você deseja criar uma hierarquia de estrutura de pastas, use
mkdirs
fonte
Crie um único diretório.
Crie um diretório chamado “Directory2 e todos os seus subdiretórios“ Sub2 ″ e “Sub-Sub2 ″ juntos.
Fonte: este tutorial perfeito , você encontra também um exemplo de uso.
fonte
Para java 7 e superior:
Parece desnecessário verificar a existência do diretório ou arquivo antes de criar, a partir dos javadocs createDirectories :
fonte
O método a seguir deve fazer o que você deseja, apenas verifique o valor de retorno de mkdir () / mkdirs ()
fonte
Embora esta pergunta tenha sido respondida. Gostaria de colocar algo extra, ou seja, se existe um arquivo com o nome do diretório que você está tentando criar, isso deve gerar um erro. Para futuros visitantes.
fonte
Arrumado e limpo:
fonte
Bem, para criar diretório / pasta em java, temos dois métodos
Aqui, o método makedirectory cria um diretório único, se ele não existir.
E
Aqui, o método makedirectories criará todos os diretórios ausentes no caminho que o objeto de arquivo representa.
Por exemplo, consulte o link abaixo (explicado muito bem). Espero que ajude!! https://www.flowerbrackets.com/create-directory-java-program/
fonte
Só queria apontar para todos que ligavam
File.mkdir()
ouFile.mkdirs()
ter cuidado com oFile
objeto é um diretório e não um arquivo. Por exemplo, se você chamarmkdirs()
o caminho/dir1/dir2/file.txt
, ele criará uma pasta com o nomefile.txt
que provavelmente não é o que você queria. Se você estiver criando um novo arquivo e também desejar criar automaticamente pastas pai, poderá fazer algo assim:fonte
Assim funciona para mim um diretório único ou mais ou mais: precisa importar java.io.File;
/ * digite o código abaixo para adicionar um diretório dir1 ou verifique se existe dir1, se não existir, portanto, crie o mesmo com dir2 e dir3 * /
fonte
Esta função permite criar um diretório no diretório inicial do usuário.
fonte
se você quiser ter certeza de que foi criado, então:
porque
mkDir()
retorna um booleano, e os findbugs irão chorar por ele se você não usar a variável. Também não é bom ...mkDir()
retorna apenas verdadeiro se omkDir()
cria. Se o diretório existir, ele retornará false; portanto, para verificar o diretório que você criou, chame apenasexists()
semkDir()
retornar false.assertThat()
irá verificar o resultado e falhará seexists()
retornar falso. ofc, você pode usar outras coisas para lidar com o diretório não criado.fonte
fonte
Você também pode consultar a função makdir () para criar um novo diretório em uma pasta onde desejar.
fonte
makdir
. Se você quis dizermkdir
, como isso adiciona algo às respostas existentes?