2012-08-30 12 views
27

Dlaczego plik.mkdir zwraca wartość false?Plik.mkdir lub mkdirs return false - Powód?

Google wskazuje, że może istnieć kilka przyczyn (np. Bezpieczeństwo, uprawnienia, nazwa ścieżki itp.).

Moje pytania:

  1. Jak znaleźć dokładną przyczynę zwrotu fałszywe?
  2. Jeśli bezpieczeństwo/powody są powodem, dlaczego SecurityException nie jest odrzucany?

Odpowiedz

16

Jeśli zabezpieczenia/uprawnienia jest powód, dlaczego jest SecurityException nieskręcany (które jest wymienione w javadoc)?

SecurityException jest generowany, gdy nie masz pozwolenia na poziomie JVM coś zrobić, a nie OS-poziom

Czy istnieje sposób, aby znaleźć dokładną przyczynę zwrotu fałszywe?

Nie, AFAIK. Jedynym sposobem, aby się dowiedzieć, jest samodzielne sprawdzenie uprawnień do katalogu, upewnienie się, że nie istnieje przed wywołaniem ich, sprawdzenie, czy katalog macierzysty istnieje, itp.

Jeśli jednak używasz Java 7 lub wyżej, możesz użyć NIO zamiast tworzyć katalog. Konkretnie Files.createDirectory:

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

Jeśli chcesz użyć NIO całkowicie z użyciem java.io.File, można użyć Paths.get stworzyć Path Zamiast:

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

W obu przypadkach, jeśli katalog nie może być utworzony, rzuci IOException z dokładnym powodem, dla którego operacja się nie powiodła.

Dotyczy to większości metod w dokumencie Files, dlatego używanie go jest zalecane w przypadku używania metod z klasy File.

+1

Przy "mkdir", jeśli próbujesz wywołać mkdir ("/ ścieżka1/ścieżka2 /"); a folder path1 (parent) nie istniał przed wykonaniem polecenia, mkdir zawiedzie, może tylko utworzyć nowy folder w istniejącym folderze, mkdirs może utworzyć wszystkie foldery - path1 i path2. Nie mam pojęcia o niepowodzeniu mkdirs. Mam nadzieję, że pomoże – Andiana

+0

@Andiana poprawna. Dzieje się tak, ponieważ 'File.mkdir' Java'a podąża za konwencjami Linux zamiast konwencji Windows i nie tworzy pośrednich katalogów. 'File.mkdirs' działa zgodnie z konwencjami Windows i zachowuje się jak' mkdir --parents' w systemie Linux. Słuszna uwaga. Mimo to, aby uzyskać dokładny powód, odpowiedź Michaela poniżej jest najlepsza: użyj pakietów NIO Javy. – Brian

8
  1. Nie, nie ma mowy, aby znaleźć dokładną przyczynę mkdirs() zwraca false, przynajmniej nie od wewnątrz Java, jak będzie to prawdopodobnie OS zależne.

  2. SecurityException jest wyrzucane, jeśli nie jest to naruszenie bezpieczeństwa w SecurityManager „s checkRead() i checkWrite() metod. Wyjątek nie zostanie zgłoszony, jeśli wystąpi problem z uprawnieniami systemu operacyjnego.


Dodatkowo należy pamiętać, że jeśli zadzwonisz File.mkdir(), a katalog nadrzędny nie istnieje, mkdir() zwróci false. Jednak wywołanie File.mkdirs() spowoduje utworzenie nieistniejących katalogów nadrzędnych.

38

mkdir i mkdirs zwracają wartość false, jeśli katalog już istnieje, co może być jedną z przyczyn niepowodzenia.

Jeśli używasz języka Java 7, możesz użyć klasy Pliki. Wywołuje wyjątek IOException z całkiem niezłym opisem.

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

Zwraca wartość false, jeśli katalog już istnieje lub wystąpił błąd podczas tworzenia katalogu. Teraz jest kawałek użytecznego API. –

Powiązane problemy