Diferença entre mkdir () e mkdirs () em java para java.io.File [fechado]

123

Alguém pode me dizer a diferença entre estes dois métodos:

  • file.mkdir()
  • file.mkdirs()
Krishna Kankal
fonte
23
Leia o javadoc: mkdir vs mkdirs
assylias
2
A maneira mais recente de fazer isso é usando os métodos estáticos Files.createDirectories e Files.createDirectory: docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
neves
Você pode obter "Arquivo não suportado" depois de usar o mkdir.
user7856586
Existe alguma diferença de desempenho entre os dois? Especialmente quando os diretórios pai já existem?
Joshua Pinter

Respostas:

158

mkdirs()também cria diretórios pai no caminho que isso Filerepresenta.

javadocs para mkdirs():

Cria o diretório nomeado por esse caminho abstrato, incluindo todos os diretórios pai necessários, mas inexistentes. Observe que, se essa operação falhar, ela poderá criar alguns dos diretórios-pai necessários.

javadocs para mkdir():

Cria o diretório nomeado por este caminho abstrato.

Exemplo:

File  f = new File("non_existing_dir/someDir");
System.out.println(f.mkdir());
System.out.println(f.mkdirs());

renderá falsepara o primeiro [e nenhum diretório será criado] e truepara o segundo, e você terá criadonon_existing_dir/someDir

amit
fonte
7
Porque a Oracle está quebrando links na internet novamente: mkdirs () e mkdir ()
MyPasswordIsLasercats
@MyPasswordIsLasercats Obrigado por me informar. fixo.
31714
1
Se o diretório já existir, mkdir()retornará trueou false? O javadoc não parece cobrir esse aspecto.
Arun
@Arun, de acordo com o Javadoc, ele retorna "true se e somente se o diretório foi criado", o que suponho ser ambíguo quanto ao fato de ter sido criado por essa chamada ou anteriormente. Esta resposta sugere a primeira.
Samuel Edwin Ward
mkdir e mkdirs retornam ambos false no meu caso -.-. Funciona se eu usar barra invertida dupla "\\" MAS: se eu fizer ".toURI ()" depois disso eu recebo: file: / Users / MyName / Desktop /% 5Cnon_existing_dir% 5CsomeDir / e se eu fizer ".getPath () "eu recebo" \ non_existing_dir \ someDir "e se eu receber" .getCanonicalPath () "eu recebo / Users / MyName / Desktop / \ non_existing_dir \ someDir
Aerox
62

mkdirs()criará o caminho do diretório especificado em sua totalidade, onde mkdir()somente criará o diretório mais inferior, falhando se não conseguir encontrar o diretório pai do diretório que está tentando criar.

Em outras palavras, mkdir()é como mkdire mkdirs()é como mkdir -p.

Por exemplo, imagine que temos um /tmpdiretório vazio . O código a seguir

new File("/tmp/one/two/three").mkdirs();

criaria os seguintes diretórios:

  • /tmp/one
  • /tmp/one/two
  • /tmp/one/two/three

Onde este código:

new File("/tmp/one/two/three").mkdir();

não criaria nenhum diretório - como não seria encontrado /tmp/one/two- e retornaria false.

Dave Webb
fonte
4
mkdir()

cria apenas um diretório por vez, se for o pai único. caso contrário, ele pode criar o subdiretório (se o caminho especificado existir apenas) e não criar nenhum diretório entre dois diretórios. portanto, ele não pode criar vários diretórios em um diretório

mkdirs()

crie os vários diretórios (entre dois diretórios também) por vez.

Durga Rao
fonte