W Javie dynamicznie tworzę zestaw plików i chciałbym zmienić uprawnienia do tych plików w systemie plików linux / unix. Chciałbym móc wykonać odpowiednik Java chmod
. Czy to możliwe Java 5? Jeśli tak to jak?
Wiem, że w Javie 6 File
obiekt ma setReadable()
/ setWritable()
metody. Wiem również, że mógłbym wykonać wywołanie systemowe, aby to zrobić, ale chciałbym tego uniknąć, jeśli to możliwe.
java
filesystems
Roy Rico
źródło
źródło
Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxr-x---"))
Odpowiedzi:
Pełna kontrola nad atrybutami plików jest dostępna w Javie 7, jako część „nowego” narzędzia New IO ( NIO.2 ). Na przykład, uprawnienia POSIX można ustawić na istniejącym pliku
setPosixFilePermissions()
, lub atomowo na tworzenie plików z metod, takich jakcreateFile()
czynewByteChannel()
.Możesz utworzyć zestaw uprawnień za pomocą
EnumSet.of()
, ale metoda pomocniczaPosixFilePermissions.fromString()
użyje konwencjonalnego formatu, który będzie bardziej czytelny dla wielu programistów. W przypadku interfejsów API, które akceptują aFileAttribute
, możesz opakować zestaw uprawnień za pomocąPosixFilePermissions.asFileAttribute()
.We wcześniejszych wersjach języka Java używanie własnego kodu natywnego lub
exec
narzędzi wiersza poleceń jest powszechnym podejściem.źródło
Oprócz sugestii ericksona istnieje również jna , która pozwala na wywoływanie natywnych bibliotek bez używania jni. Jest szokująco łatwy w użyciu i użyłem go w kilku projektach z wielkim sukcesem.
Jedynym zastrzeżeniem jest to, że jest wolniejszy niż jni, więc jeśli robisz to z bardzo dużą liczbą plików, może to stanowić problem.
(Edycja w celu dodania przykładu)
Oto pełny przykład jna chmod:
źródło
W wersjach starszych niż Java 6 nie ma obsługi aktualizacji uprawnień do plików na poziomie Java. Musisz zaimplementować własną natywną metodę lub wywołanie,
Runtime.exec()
aby wykonać polecenie na poziomie systemu operacyjnego, takie jak chmod .Począwszy od Java 6, możesz użyć
File.setReadable()/File.setWritable()/File.setExecutable()
do ustawiania uprawnień do plików. Ale nie symuluje systemu plików POSIX, który pozwala na ustawienie uprawnień dla różnych użytkowników. File.setXXX () pozwala tylko na ustawienie uprawnień dla właściciela i wszystkich innych.Począwszy od Java 7, wprowadzono uprawnienia do plików POSIX. Możesz ustawić uprawnienia do plików, tak jak to robiłeś w systemach * nix. Składnia jest następująca:
Tej metody można używać tylko w systemie plików POSIX, co oznacza, że nie można jej wywołać w systemie Windows.
Aby uzyskać szczegółowe informacje na temat zarządzania uprawnieniami do plików, przeczytaj ten post .
źródło
dla Windows 7 z nio 2.0:
źródło
Jeśli chcesz ustawić uprawnienia 777 do utworzonego pliku, możesz użyć następującej metody:
źródło
Po prostu zaktualizuj tę odpowiedź, chyba że ktoś napotka to później, ponieważ JDK 6 możesz użyć
dokumentację można znaleźć w Oracle File (Java Platform SE 7) . Należy pamiętać, że te polecenia działają tylko wtedy, gdy bieżący pracujący użytkownik ma prawo własności lub uprawnienia do zapisu w tym pliku. Zdaję sobie sprawę, że OP chciał dostępu typu chmod do bardziej skomplikowanej konfiguracji użytkownika. te ustawią tę opcję dla wszystkich użytkowników.
źródło
Możesz użyć metod klasy File: http://docs.oracle.com/javase/7/docs/api/java/io/File.html
źródło
dla Oralce Java 6:
działa pod Solarisem / Linuksem.
źródło
FileSystemPreferences
spwansujeTimer
wątek demona. dodaje również hak zamykający, ale w przypadku niektórych aplikacji może to nadal być problematyczne.Apache ant chmod (niezbyt elegancki, dodając go dla kompletności) udostępniony @msorsky
źródło
Odniesienie: jak zmienić uprawnienia do pliku w java
źródło
Istnieje przykładowa klasa w Oracle Docs, która działa bardzo podobnie do chmod UNIX. Działa jednak z java se 7+.
źródło
źródło