В UNIX подобных системах каждый процесс имеет свойство umask, который маскируется на разрешения любого файла, созданного и наследуется дочерними процессами. по умолчанию 0002
или «выключить запись для других». Поэтому наиболее вероятно, что Java устанавливает разрешение, которое вы ищете, а затем оно замаскировано. Вы можете явно установить разрешения after, создав файл, или измените настройки umask java-процесса до, вы его запустите.
Сначала давайте посмотрим на текущий UMASK:
[email protected]:/tmp$ umask
0002
затем позволяет сделать файл с правами на чтение и запись для всех (прикосновение делает это так же, как ваш код Java)
[email protected]:/tmp$ touch foo
[email protected]:/tmp$ ls -l foo
-rw-rw-r-- 1 arthur arthur 0 Aug 28 13:58 foo
мы видим что октал 0002
был замаскирован из фактических прав доступа к файлам.
Таким образом, мы можем удалить это биты полномочий, установив его в 0000:
[email protected]:/tmp$ umask 0000
[email protected]:/tmp$ touch foo
И мы видим, что Foo остается, как это было при обновлении, так как umasks применяются только к новых файлов. и новая файловая панель создается с помощью разрешения чтения-другого.
[email protected]:/tmp$ ls -l foo
-rw-rw-r-- 1 arthur arthur 0 Aug 28 14:00 foo
[email protected]:/tmp$ touch bar
[email protected]:/tmp$ ls -l bar
-rw-rw-rw- 1 arthur arthur 0 Aug 28 14:00 bar
Я в привычке настройки разрешений явно после создания файла в Java, потому что это несет более легко от системы * Вы можете доказать это вашу собственную личность, установив в ваших биты полномочий оболочки перед запуском emacs/your-program и после проверки прав доступа к файлам.
* Java - это «писать, когда-нибудь бежать», а?