2013-01-03 22 views
5

Po kompilacji następujący kod w Eclipse przy użyciu Mac:Permission Denied: Tworzenie pliku w Javie

import java.io.*; 

    public class Filer{ 
     public static void main(String[] args) throws IOException{ 

     File f1; 

     f1 = new File("/System/file.txt"); 

     if(!f1.exists()){ 
      f1.createNewFile(); 

     } 
     } 
    } 

pojawia się błąd:

Exception in thread "main" java.io.IOException: Permission denied 
     at java.io.UnixFileSystem.createFileExclusively(Native Method) 
     at java.io.File.createNewFile(File.java:883) 
     at Filer.main(Filer.java:11) 

może ktoś mi powiedzieć, dlaczego tak jest? Czy istnieje sposób na zmianę uprawnień? A gdybym skompilował to jako plik .jar i wysłał komuś, czy ta osoba miałaby odpowiednie uprawnienia?

+6

Nikt nie może nigdzie pisać w systemie plików. '/ System' wygląda na OS X i jest własnością root'a, który jako jedyny może tam pisać. Może wybrał inny katalog? – miku

Odpowiedz

8

Can anyone tell me why that is?

Twój użytkownik nie ma uprawnień do tworzenia pliku w tym katalogu.

Is there any way to change the permissions?

W taki sam sposób można zmienić uprawnienia dowolnego katalogu.

W Javie 7+

Files.setPosixFilePermisions(f1.toPath(), 
    EnumSet.of(OWNER_READ, OWNER_WRITE, OWNER_EXECUTE, GROUP_READ, GROUP_EXECUTE)); 

And if I were to compile this as a .jar file and send it to someone, would that person have the correct permissions?

Podejrzewam odpowiednie uprawnienia do katalogu o nazwie /System jest to, że nie masz dostępu do zapisu.

Czy istnieje jakikolwiek powód, aby nie używać katalogu domowego lub bieżącego katalogu roboczego?

+1

Alternatywnie użyj 'sudo java', aby uruchomić kod (i zaakceptuj, że nie będzie działać w środowisku Eclipse). Jednak nie pisanie do '/ System' jest lepszym rozwiązaniem! –

+0

Czy wysłanie go na pulpit byłoby lepszą opcją? Czy istnieje sposób na wykrycie nazwy użytkownika obecnego komputera? tj. /Users/**username**/Desktop/file.txt – hmir

+0

Możesz użyć katalogu domowego użytkownika, np. 'System.getProperty (" user.home ") +"/Desktop "' Zobacz http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html –

2

Tylko użytkownicy posiadający specjalne uprawnienia mogą zapisywać w katalogu System.

Normalni użytkownicy mogą pisać tylko w swoim katalogu domowym

Powiązane problemy