如何以编程方式更改文件权限?
2022-08-31 07:54:02
在Java中,我正在动态创建一组文件,并且我想在linux / unix文件系统上更改这些文件的文件权限。我希望能够执行 Java 等效项 。这有可能 Java 5 吗?如果是这样,如何?chmod
我知道在Java 6中,对象有/方法。我也知道我可以进行系统调用来执行此操作,但如果可能的话,我想避免这种情况。File
setReadable()
setWritable()
在Java中,我正在动态创建一组文件,并且我想在linux / unix文件系统上更改这些文件的文件权限。我希望能够执行 Java 等效项 。这有可能 Java 5 吗?如果是这样,如何?chmod
我知道在Java 6中,对象有/方法。我也知道我可以进行系统调用来执行此操作,但如果可能的话,我想避免这种情况。File
setReadable()
setWritable()
对文件属性的完全控制在Java 7中可用,作为“新”新IO工具(NIO.2)的一部分。例如,POSIX 权限可以使用 setPosixFilePermissions()
在现有文件上设置,或者在使用 createFile()
或 newByteChannel()
等方法创建文件时以原子方式设置。
您可以使用 创建一组权限,但帮助器方法 PosixFilePermissions.fromString()
将使用传统格式,许多开发人员将更具可读性。对于接受 的 API,您可以使用 PosixFilePermissions.asFileAttribute()
包装权限集。EnumSet.of()
FileAttribute
Set<PosixFilePermission> ownerWritable = PosixFilePermissions.fromString("rw-r--r--");
FileAttribute<?> permissions = PosixFilePermissions.asFileAttribute(ownerWritable);
Files.createFile(path, permissions);
在早期版本的 Java 中,使用自己的本机代码或 -ing 命令行实用程序是常用方法。exec
除了erickson的建议之外,还有jna,它允许你在不使用jni的情况下调用原生库。它非常容易使用,我已经在几个项目中使用它,并取得了巨大的成功。
唯一需要注意的是,它比jni慢,所以如果你对大量的文件这样做,那对你来说可能是一个问题。
(编辑以添加示例)
下面是一个完整的 jna chmod 示例:
import com.sun.jna.Library;
import com.sun.jna.Native;
public class Main {
private static CLibrary libc = (CLibrary) Native.loadLibrary("c", CLibrary.class);
public static void main(String[] args) {
libc.chmod("/path/to/file", 0755);
}
}
interface CLibrary extends Library {
public int chmod(String path, int mode);
}