2013-07-19 22 views
12

Sto usando Eclipse e jdk1.7. Sto facendo un programma base usando la gestione dei file, in cui deve essere fatta una directory di output all'interno della directory. Ma quando eseguo il programma, l'output è falso e la directory non viene creata. Ho pensato che l'output fosse falso a causa della presenza di una directory con lo stesso nome, ma questo non è il motivo. Quindi ho bisogno di aiuto. Ecco il mio codice:mkdir() non sta creando la nuova directory

import java.io.File; 

public class P { 
    public static void main(String[] args) { 
     File f1 = new File ("abc"); 
     File f2 = new File (f1,"abc"); 
     System.out.println(f2.mkdir()); 
    } 
} 

L'output è falso e tuttavia non è stata creata alcuna directory. Come posso risolvere questo problema? Questo non è solo in questo programma - ogni singolo programma in cui sto chiamando il metodo mkdir() sta avendo lo stesso problema.

+0

fa "abc" esiste ed è una directory? hai cercato la nuova directory nella directory di lavoro del tuo programma? (stampa il nuovo file (""). getAbsolutePath() per scoprire il WD) – A4L

+1

Per la diagnostica, stampa ['f2.getAbsolutPath()'] (http://docs.oracle.com/javase/7/docs/api /java/io/File.html#getAbsolutePath()). Forse sta cercando di creare le directory in una posizione in cui non si ha accesso in scrittura? – mthmulders

+0

Java 7 ha introdotto la classe Files che utilizza le eccezioni invece dei valori di ritorno booleani. Questo può essere utile per ottenere una descrizione testuale di ciò che non è riuscito per il debugging futuro. –

risposta

19

È necessario utilizzare mkDirs() con una s se si desidera creare più directory. Probabilmente vale anche la pena di verificare che tu sia canWrite() nella posizione in quanto alcuni posti sono autorizzati. Entrambi sono sulla classe File

12

sua obj.mkdirs()

dare un'occhiata a questo:

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

La prima stampa non creare una directory e restituisce false ma il secondo lo fa e restituisce true

1

mkdir ha bisogno del percorso astratto, non del percorso relativo. prova a usare ...

File f2 = new File (f1, "C:\\"); 

... per esempio.

Da Java DOC:

public boolean mkdir()

crea la directory di nome da questo percorso astratto.

Returns:

vero se e solo se la directory è stato creato; false altrimenti

Produce:

SecurityException - Se un manager della sicurezza esiste e il suo metodo SecurityManager.checkWrite (java.lang.String) non consente la directory di nome da creare

0

Create directory example

sembra che tu abbia bisogno di lavorare sul tuo percorso un po 'dato che non sembra che File possa dedurre "abc".

Inoltre, assicurarsi di disporre delle autorizzazioni per il percorso che si sta tentando di creare la directory. Se non lo fai, fallirà. È passato un po 'di tempo da quando ho giocato con Java, quindi non sono sicuro che avresti bisogno di effettuare chiamate mkdir per tutto il percorso (cioè/qui /,/qui/ora-qui /,/qui/ora- qui/finale) o no. Pensa che potrebbe essere ricorsivo ma che varrebbe la pena di verificarlo.

In realtà, guardando le altre risposte sembra che gli mkdir siano ricorsivi, mkdir no.Vorrei andare con gli mkdir, specialmente se l'input non sarà conosciuto dall'inizio, altrimenti finirai per scrivere una funzione con mkdir che fa esattamente la stessa cosa.

Problemi correlati