2013-07-19 15 views
12

Ich benutze Eclipse und jdk1.7. Ich mache ein grundlegendes Programm mit der Dateiverarbeitung, in dem ein Ausgabeverzeichnis innerhalb des Verzeichnisses erstellt werden soll. Aber wenn ich das Programm starte, zeigt die Ausgabe false an und das Verzeichnis wird nicht erstellt. Ich dachte, dass die Ausgabe wegen des Vorhandenseins eines Verzeichnisses mit dem gleichen Namen falsch war, aber das ist nicht der Grund. Also brauche ich Hilfe. Hier ist mein Code:mkdir() erstellt nicht das neue Verzeichnis

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()); 
    } 
} 

Seine Ausgabe ist falsch und noch kein Verzeichnis wurde erstellt. Wie kann ich dieses Problem lösen? Dies ist nicht nur in diesem Programm - jedes Programm, in dem ich die Methode mkdir() aufrufen, hat das gleiche Problem.

+0

tut "abc" existiert und ein Verzeichnis ist? Hast du das neue Verzeichnis im Arbeitsverzeichnis deines Programms gesucht? (print new File (""). getAbsolutePath() um den WD zu finden) – A4L

+1

Für die Diagnose, drucke ['f2.getAbsolutPath()'] (http://docs.oracle.com/javase/7/docs/api /java/io/File.html#getAbsolutePath()). Vielleicht versucht es, die Verzeichnisse an einem Ort zu erstellen, an dem Sie keinen Schreibzugriff haben? – mthmulders

+0

Java 7 führte die Files-Klasse ein, die Ausnahmen anstelle von booleschen Rückgabewerten verwendet. Dies kann nützlich sein, um eine Textbeschreibung dessen zu erhalten, was beim zukünftigen Debugging fehlgeschlagen ist. –

Antwort

19

Sie müssen mkDirs() mit einem s verwenden, wenn Sie mehrere Verzeichnisse erstellen möchten. Es ist wahrscheinlich auch wert, dass Sie überprüfen, dass Sie canWrite() an den Speicherort wie einige Orte sind berechtigt. Beide sind auf der File-Klasse

12

seine obj.mkdirs()

haben einen Blick auf diese:

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

Der erste Druck wird kein Verzeichnis erstellen und gibt false aber die zweite tut und gibt true

1

mkdir benötigt den abstrakten Pfad, nicht den relativen Pfad. versuchen zu verwenden ...

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

... zum Beispiel.

Von Java DOC:

public boolean mkdir()

Erstellt die von diesem abstrakten Pfadnamen angegebene Verzeichnis.

Returns:

wahr, wenn und nur wenn das Verzeichnis erstellt wurde; andernfalls false

Würfe:

Security - Wenn ein Securitymanager gesetzt ist und seine SecurityManager.checkWrite (java.lang.String) Methode erstellt werden nicht das genannte Verzeichnis ermöglichen

0

Create directory example

Es sieht so aus, als müssten Sie auf Ihrem Pfad ein wenig arbeiten, da es nicht so aussieht, als würde Datei "abc" ableiten.

Stellen Sie außerdem sicher, dass Sie über Berechtigungen für den Pfad verfügen, den Sie versuchen, das Verzeichnis zu erstellen. Wenn Sie dies nicht tun, wird es fehlschlagen. Es ist schon eine Weile her, seit ich mit Java gespielt habe, also nicht sicher, ob du mkdir aufrufen musst, den ganzen Pfad entlang (zB/hier /,/hier/jetzt - hier /,/hier/jetzt - hier/endgültig) oder nicht. Denken Sie, es könnte rekursiv sein, aber das wäre es wert, überprüft zu werden.

Eigentlich sieht von den anderen Antworten aussieht wie mkdirs wäre rekursiv, mkdir ist nicht.Ich würde mit mkdirs gehen, besonders wenn die Eingabe von Anfang an nicht bekannt sein wird, sonst wirst du am Ende eine Funktion mit mkdir schreiben, die genau dasselbe tut.