2012-08-30 13 views
27

Perché file.mkdir restituisce false?File.mkdir o mkdirs restituiscono false - Reason?

Google indica che potrebbero esserci diversi motivi (ad esempio sicurezza, autorizzazioni, percorso, ecc.).

Le mie domande:

  1. come trovare il motivo esatto del ritorno falso?
  2. Se la sicurezza/autorizzazioni è un motivo, perché SecurityException non viene generato?

risposta

16

Se di sicurezza/permessi è una ragione, allora perché è SecurityException non torta (che è menzionato nel javadoc)?

Un SecurityException viene generata quando non si dispone di un'autorizzazione a livello di JVM di fare qualcosa, non OS-livello

C'è un modo per trovare il motivo esatto per cui di ritorno falso?

No, AFAIK. L'unico modo per sapere sarebbe controllare le autorizzazioni sulla directory da solo, assicurarsi che non esistano prima di chiamarle, controllare se la directory principale esiste, ecc.

Tuttavia, se si utilizza Java 7 o superiore, è possibile utilizzare NIO invece per creare la directory. In particolare, Files.createDirectory:

File dir = new File("mydir"); 
Files.createDirectory(dir.toPath()); 

Se si desidera utilizzare NIO del tutto con l'utilizzo di java.io.File, è possibile utilizzare per creare un Paths.getPath invece:

Path dir = Paths.get("mydir"); 
Files.createDirectory(dir); 

In entrambi i casi, se la directory non può essere creato, genererà un IOException con un motivo preciso per cui l'operazione non è riuscita.

Questo è vero per la maggior parte dei metodi in Files, pertanto è consigliabile utilizzarlo per utilizzare i metodi nella classe File.

+1

Con "mkdir", se si sta tentando di mkdir ("/ percorso1/percorso2 /"); e la cartella path1 (parent) non esisteva prima di eseguire il comando, l'mkdir fallirà, può solo creare una nuova cartella all'interno di una cartella esistente, mkdirs può creare tutte le cartelle - path1 e path2. Non ho idea del fallimento degli mkdir. Spero che aiuti – Andiana

+0

@Andiana corretto. Questo perché 'File.mkdir' di Java segue le convenzioni di Linux invece delle convenzioni di Windows e non crea directory intermedie. 'File.mkdirs' segue le convenzioni di Windows e si comporta come' mkdir --parents' in Linux. Buon punto Tuttavia, per ottenere il motivo esatto, la risposta di Michael qui sotto è la migliore: utilizzare i pacchetti NIO di Java. – Brian

8
  1. No, non c'è modo di trovare il motivo esatto mkdirs() restituisce false, almeno non dal di dentro Java, come probabilmente sarebbe dipende dal sistema operativo.

  2. Un SecurityException viene generata se c'è una violazione della sicurezza in checkRead() e checkWrite() metodi s' il SecurityManager. L'eccezione non viene generata se esiste un problema di autorizzazioni del sistema operativo.


Inoltre, si noti che se si chiama File.mkdir(), e la directory genitore non esiste, mkdir() tornerà falso. Tuttavia, chiamando File.mkdirs() verranno create le directory padre inesistenti.

38

mkdir e mkdirs restituiscono false se la directory esiste già, quindi questa potrebbe essere una delle ragioni dell'errore.

Se si utilizza Java 7, è possibile utilizzare la classe File. Genera un errore IOException con descrizioni abbastanza buone.

Files.createDirectory(file.toPath()); 
+6

Restituisce false se la directory esiste già o se si è verificato un errore durante la creazione della directory. Ora c'è un pezzo di API utile. –

Problemi correlati