Di Java, saya secara dinamis membuat satu set file dan saya ingin mengubah izin file pada file ini di sistem file linux / unix. Saya ingin dapat menjalankan persamaan Java dengan chmod
. Apakah itu mungkin Java 5? Jika ya, bagaimana caranya?
Saya tahu di Java 6 File
objek memiliki setReadable()
/ setWritable()
metode. Saya juga tahu bahwa saya dapat melakukan panggilan sistem untuk melakukan ini, tetapi saya ingin menghindarinya jika memungkinkan.
java
filesystems
Roy Rico
sumber
sumber
Files.setPosixFilePermissions(path, PosixFilePermissions.fromString("rwxr-x---"))
Jawaban:
Kontrol penuh atas atribut file tersedia di Java 7, sebagai bagian dari fasilitas "baru" IO Baru ( NIO.2 ). Misalnya, izin POSIX dapat diatur pada file yang ada dengan
setPosixFilePermissions()
, atau secara atomis pada pembuatan file dengan metode seperticreateFile()
ataunewByteChannel()
.Anda dapat membuat satu set izin menggunakan
EnumSet.of()
, tetapi metode helperPosixFilePermissions.fromString()
akan menggunakan format konvensional yang akan lebih mudah dibaca oleh banyak pengembang. Untuk API yang menerimaFileAttribute
, Anda bisa menggabungkan set izin denganPosixFilePermissions.asFileAttribute()
.Di versi Java sebelumnya, menggunakan kode asli Anda sendiri, atau
exec
utilitas baris perintah -ing adalah pendekatan yang umum.sumber
Selain saran erickson, ada juga jna , yang memungkinkan Anda memanggil perpustakaan asli tanpa menggunakan jni. Ini sangat mudah digunakan, dan saya telah menggunakannya pada beberapa proyek dengan kesuksesan besar.
Satu-satunya peringatan adalah bahwa ini lebih lambat dari jni, jadi jika Anda melakukan ini pada sejumlah besar file yang mungkin menjadi masalah bagi Anda.
(Mengedit untuk menambahkan contoh)
Berikut contoh lengkap jna chmod:
sumber
Sebelum Java 6, tidak ada dukungan pembaruan izin file di tingkat Java. Anda harus menerapkan metode asli Anda sendiri atau panggilan
Runtime.exec()
untuk menjalankan perintah tingkat OS seperti chmod .Mulai dari Java 6, Anda dapat menggunakan
File.setReadable()/File.setWritable()/File.setExecutable()
untuk mengatur hak akses file. Tetapi itu tidak mensimulasikan sistem file POSIX yang memungkinkan untuk mengatur izin untuk pengguna yang berbeda. File.setXXX () hanya mengizinkan untuk mengatur izin untuk pemilik dan orang lain.Mulai dari Java 7, izin file POSIX diperkenalkan. Anda dapat mengatur hak akses file seperti yang telah Anda lakukan pada sistem * nix. Sintaksnya adalah:
Metode ini hanya dapat digunakan pada sistem file POSIX, ini berarti Anda tidak dapat memanggilnya di sistem Windows.
Untuk detail tentang manajemen izin file, rekomendasikan Anda untuk membaca posting ini .
sumber
untuk windows 7 dengan nio 2.0:
sumber
Jika Anda ingin mengatur 777 izin ke file yang Anda buat daripada Anda dapat menggunakan metode berikut:
sumber
Hanya untuk memperbarui jawaban ini kecuali ada yang menemukan ini nanti, karena JDK 6 dapat Anda gunakan
Anda dapat menemukan dokumentasinya di File Oracle (Java Platform SE 7) . Ingatlah bahwa perintah ini hanya berfungsi jika pengguna yang bekerja saat ini memiliki kepemilikan atau akses tulis ke file itu. Saya sadar bahwa OP menginginkan akses tipe chmod untuk konfigurasi pengguna yang lebih rumit. ini akan menetapkan opsi di seluruh papan untuk semua pengguna.
sumber
Anda dapat menggunakan metode kelas File: http://docs.oracle.com/javase/7/docs/api/java/io/File.html
sumber
untuk Oralce Java 6:
bekerja di bawah solaris / linux.
sumber
FileSystemPreferences
spwansTimer
thread daemon setelah dimuat. itu juga menambahkan hook shutdown, tetapi untuk beberapa aplikasi ini mungkin masih bermasalah.Apache ant chmod (tidak terlalu elegan, menambahkannya untuk kelengkapan) kredit yang dibagikan dengan @msorsky
sumber
Referensi: cara mengubah izin file di java
sumber
Ada contoh kelas di Oracle Docs yang bekerja sangat mirip dengan chmod UNIX. Ia bekerja dengan java se 7+ sekalipun.
sumber
sumber