我正在尝试将createFile与来自"rw-rw-rw-"
的FileAttribute一起使用。我的文件在Fedora上创建为"rw-rw-r--"
。
创建文件时如何设置OTHERS_WRITE?
示例:
(->> "rw-rw-rw-"
PosixFilePermissions/fromString
PosixFilePermissions/asFileAttribute
vector
into-array
(Files/createFile (Paths/get "temp" (into-array String []))))
;;; temp is created as rw-rw-r--
答案 0 :(得分:3)
在类似unix的系统中,每个进程都有一个名为umask的属性,该属性被掩盖到子进程创建和继承的任何文件的权限上。默认值为0002
或“关闭其他人的写入”。因此,最有可能的是 Java正在设置您所寻求的权限,然后将其屏蔽。您可以在启动之前显式设置创建文件的权限after或更改java进程的umask设置。
首先让我们看看当前的umask:
arthur@a:/tmp$ umask
0002
然后让我们为每个人创建一个带有读写的文件(触摸这个以及你的java代码)
arthur@a:/tmp$ touch foo
arthur@a:/tmp$ ls -l foo
-rw-rw-r-- 1 arthur arthur 0 Aug 28 13:58 foo
我们发现八进制0002
已被掩盖在实际文件权限之外
所以我们可以通过将它设置为0000来删除这个umask:
arthur@a:/tmp$ umask 0000
arthur@a:/tmp$ touch foo
我们发现foo仍然与更新时一样,因为umasks仅适用于 new 文件。并使用read-other权限创建一个新的文件栏。
arthur@a:/tmp$ ls -l foo
-rw-rw-r-- 1 arthur arthur 0 Aug 28 14:00 foo
arthur@a:/tmp$ touch bar
arthur@a:/tmp$ ls -l bar
-rw-rw-rw- 1 arthur arthur 0 Aug 28 14:00 bar
我习惯在Java中创建文件后显式设置权限,因为这样可以更轻松地从系统到系统*您可以通过在运行emacs / your-之前在shell中设置umask来证明这一点。程序并检查文件权限。
* Java是“一次写一次运行”呃?