it-swarm.com.de

File.mkdir oder mkdirs geben false zurück - Grund?

Warum gibt file.mkdir false zurück?

Google gibt an, dass es mehrere Gründe geben kann (z. B. Sicherheit, Berechtigungen, Pfadname usw.). 

Meine Fragen:

  1. Wie finde ich den genauen Grund für die Rückgabe falsch?
  2. Wenn Sicherheit/Berechtigungen ein Grund sind, warum wird SecurityException nicht ausgelöst?
33
Sandeep Jindal

Wenn Sicherheit/Berechtigungen ein Grund sind, warum wird SecurityException NICHT ausgelöst (was in Javadoc erwähnt wird)?

Eine SecurityException wird ausgelöst, wenn Sie nicht über die Berechtigung auf JVM-Ebene verfügen, etwas zu tun, nicht auf Betriebssystemebene

Gibt es eine Möglichkeit, den genauen Grund für die Rückgabe von falsch zu finden?

Nein, AFAIK. Die einzige Möglichkeit, dies zu erfahren, besteht darin, die Berechtigungen für das Verzeichnis selbst zu überprüfen, sicherzustellen, dass es nicht existiert, bevor sie aufgerufen werden, ob das übergeordnete Verzeichnis vorhanden ist usw.

Wenn Sie jedoch Java 7 oder höher verwenden, können Sie stattdessen NIO verwenden, um das Verzeichnis zu erstellen. Speziell Files.createDirectory :

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

Wenn Sie NIO vollständig mit Java.io.File verwenden möchten, können Sie stattdessen mit Paths.get eine Path erstellen:

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

Wenn das Verzeichnis nicht erstellt werden kann, gibt es in beiden Fällen eine IOException mit einem genauen Grund aus, warum die Operation fehlgeschlagen ist.

Dies gilt für die meisten Methoden in Files. Daher wird die Verwendung der Methoden in der File-Klasse empfohlen.

23
Brian

mkdir und mkdirs geben false zurück, wenn das Verzeichnis bereits vorhanden ist. Dies kann ein Grund für den Fehler sein.

Wenn Sie Java 7 verwenden, können Sie die Files-Klasse verwenden. Es gibt eine IOException mit Fehler und ziemlich guten Beschreibungen.

Files.createDirectory(file.toPath());
43
Michael Krussel
  1. Nein, es gibt keine Möglichkeit, den genauen Grund für mkdirs() zu finden, zumindest nicht aus Java heraus, da dies wahrscheinlich vom Betriebssystem abhängt.

  2. Eine SecurityException wird ausgelöst, wenn die checkRead()- und checkWrite()-Methode von SecurityManager eine Sicherheitsverletzung aufweist. Die Ausnahme wird nicht ausgelöst, wenn ein Problem mit den Betriebssystemberechtigungen vorliegt.


Beachten Sie außerdem, dass File.mkdir() False zurückgibt, wenn Sie mkdir() aufrufen und das übergeordnete Verzeichnis nicht vorhanden ist. Beim Aufruf von File.mkdirs() werden jedoch die nicht vorhandenen übergeordneten Verzeichnisse erstellt.

8
Jon Lin

Windows-spezifisch: In meinem Fall schlug die file.mkdir()-Methode mit NoSuchFileException fehl, da ich unter Windows versucht hatte, eine verschachtelte Verzeichnisstruktur direkt zu erstellen (z. B. results\results_ddMMyyyy, ohne vorher das Verzeichnis results zu erstellen).

Der gleiche Code funktionierte jedoch auf meinem Mac einwandfrei, d. H. Auf Mac wurde keine solche Ausnahme ausgelöst, und das Verzeichnis results wurde implizit mit der file.mkdir()-Methode erstellt. 

Hoffe, das hilft in Zukunft jemandem weiter.

0
Akshay Maldhure