2013-10-24 18 views
20

Mam następujący kod:Odmowa dostępu java.io.FileNotFoundException

List<FileItem> items = uploadHandler.parseRequest(request); 
for (FileItem item : items) { 
    if (!item.isFormField()) { 
     File file = new File("D:/Data"); 
    } 
} 

Gdy próbuję zapisać plik, otrzymuję następujący błąd

java.io.FileNotFoundException: D:\Data (Access is denied.) 

Jaki może być powód i jak mogę rozwiązać ten problem? Mam uprawnienia do odczytu i zapisu w tym folderze.

+0

sprawdzić, czy katalog jest obecny w "D:/Data" –

+2

Zgaduję, że to dlatego, że próbujesz otworzyć ten sam plik w każdej iteracji pętli 'for'. – Francis

+0

Trudno powiedzieć, nie widząc kodu, który faktycznie zapisuje plik, lub bez kodu, który będzie kompilował i odtwarzał problem, ale domyślam się, że plik już istnieje (lub katalog istnieje z tą nazwą)? Pamiętaj też, że w przypadku plików systemu Windows wielkość liter nie jest rozróżniana. –

Odpowiedz

44

Po wywołaniu nową złożyć mają podać nazwę pliku, nie tylko katalog, który chcesz umieścić plik.

Spróbuj coś jak

File file = new File("D:/Data/" + item.getFileName()); 
15

nie dokładnie przypadek to pytanie, ale może być pomocne. mam ten wyjątek podczas zgłoszę mkdirs() na nowym pliku zamiast jego rodzica

File file = new java.io.File(path); 
//file.mkdirs(); // wrong! 
file.getParentFile().mkdirs(); // correct! 
if (!file.exists()) { 
    file.createNewFile(); 
} 
5

trzeba ustawić uprawnienia do kontroli użytkowników.

  1. Idź do C: \ Program Files \
  2. prawym przyciskiem myszy folder, Java, kliknij przycisk Właściwości. Wybierz kartę zabezpieczeń.
  3. Tutaj kliknij przycisk "Edytuj", który wyświetli się PERMISSIONS FOR JAVA.
  4. Kliknij Dodaj, co spowoduje wyświetlenie nowego okna. W tym celu w polu "Wprowadź nazwę obiektu" wprowadź nazwę swojego konta użytkownika i kliknij w porządku (jeśli już istnieje, pomiń ten krok).
  5. Teraz w oknie "ZEZWOLENIA JAVY" zobaczysz kilka klikalnych opcji takich jak CREATOR OWNER, SYSTEM, a wśród nich jest twoja nazwa użytkownika . Kliknij na niego i zaznacz opcję FULL CONTROL w Uprawnienia do okna podrzędnego.
  6. Wreszcie, zastosuj i dobrze.
+0

To zmienia uprawnienia dla samych plików wykonywalnych Java. Nie ma powodu, aby to robić. –

3

mam szukać tego problemu i mam następujące odpowiedzi:

  1. "C:\Program Files\Apache-tomcat-7.0.69\" usuwają dodatkowy ukośnik (\)
  2. prawym przyciskiem myszy folder dziennika w tomcat folderze oraz w karcie bezpieczeństwa dać ten folder jako uprawnienie do zapisu, a następnie restartuje net-beans jako uruchamianie jako administrator.

Twój problem zostanie rozwiązany

3

Upewnij się, że katalog istnieje, masz uprawnienia do dostępu i dodać plik do ścieżki zapisu dziennika:

File file = new File("D:/Data/" + item.getFileName());