2013-07-19 17 views
12

Używam Eclipse i jdk1.7. Robię program podstawowy, korzystając z obsługi plików, w którym ma być utworzony katalog wyjściowy wewnątrz katalogu. Ale po uruchomieniu programu wynik jest fałszywy, a katalog nie jest tworzony. Myślałem, że wynik jest fałszywy z powodu obecności katalogu o tej samej nazwie, ale to nie jest powód. Potrzebuję pomocy. Oto mój kod:mkdir() nie tworzy nowego katalogu

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

Jego wynik jest fałszywy, ale nie został utworzony żaden katalog. Jak mogę rozwiązać ten problem? Jest to nie tylko w tym programie - każdy program, w którym nazwałem metodę, ma ten sam problem.

+0

robi "abc" istnieje i jest katalogiem? Czy szukałeś nowego katalogu w katalogu roboczym twojego programu? (wydrukuj nowy plik (""). getAbsolutePath(), aby dowiedzieć się, WD) – A4L

+1

Do diagnostyki, wydrukuj ['f2.getAbsolutPath()'] (http://docs.oracle.com/javase/7/docs/api /java/io/File.html#getAbsolutePath()). Może próbuje on tworzyć katalogi w miejscu, w którym nie masz dostępu do zapisu? – mthmulders

+0

Java 7 wprowadziła klasę Files, która używa wyjątków zamiast wartości zwracanych przez boolean. Może to być przydatne do uzyskania opisu tekstowego tego, co nie powiodło się dla przyszłego debugowania. –

Odpowiedz

19

Musisz użyć mkDirs() z s, jeśli chcesz utworzyć wiele katalogów. Prawdopodobnie warto również sprawdzić, czy jesteś canWrite() w lokalizacji, ponieważ niektóre miejsca są dozwolone. Oba są na klasy pliku

12

jego obj.mkdirs()

mają wyglądać tak:

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

Pierwszy wydruku nie będzie utworzyć katalog i zwraca false ale drugi robi i zwraca true

1

mkdir potrzebuje ścieżki abstrakcyjnej, a nie ścieżki względnej. spróbuj użyć ...

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

... na przykład.

Od DOC Java:

public boolean mkdir()

tworzy katalog o nazwie tej abstrakcyjnej ścieżki.

Powraca:

true wtedy i tylko wtedy, gdy katalog został utworzony; false

Zgłasza:

SecurityException - Jeśli menedżer bezpieczeństwa istnieje, a jego metoda nie pozwala na nazwie katalogu SecurityManager.checkWrite (java.lang.String) mają być utworzone

0

Create directory example

Wygląda na to, że będziesz musiał popracować nad swoją ścieżką, ponieważ nie wygląda na to, że File odczyta "abc".

Upewnij się również, że masz uprawnienia do ścieżki, którą próbujesz utworzyć. Jeśli tego nie zrobisz, zawiedzie. Minęło trochę czasu, odkąd bawiłem się z Javą, więc nie jestem pewien, czy musisz wykonać wywołania mkdir przez całą drogę (tj./Tutaj /,/tutaj/teraz-tutaj /,/tutaj/teraz- tutaj/końcowy) lub nie. Pomyśl, że może to być rekurencyjne, ale warto by to zweryfikować.

W rzeczywistości, patrząc na inne odpowiedzi wygląda na to, że mkdiry będą rekursywne, mkdir nie jest.Poszedłbym z mkdirsem szczególnie, jeśli dane wejściowe nie będą znane od początku, w przeciwnym razie skończysz pisać funkcję z mkdir, która robi dokładnie to samo.

0

W twoim przypadku możesz użyć metody makedirectories w klasie File.

File dir = new File("path name"); 
boolean isCreated = dir.mkdirs(); 

Utworzona w ten sposób metoda directories utworzy wszystkie katalogi, których brakuje w ścieżce reprezentowanej przez obiekt pliku.

Źródło i numer referencyjny znajdują się poniżej (wyjaśniono szczegółowo).

http://www.flowerbrackets.com/create-directory-java-program/

https://docs.oracle.com/javase/6/docs/api/java/io/File.html#canWrite%28%29