web-dev-qa-db-ja.com

javaファイルオブジェクトの作成中にファイル権限を777に設定する

可能性のある複製:
java内からumaskを設定するにはどうすればよいですか?

Javaでファイルオブジェクトを作成するときに、ファイルのアクセス許可をどのように777(または他の任意のアクセス許可)に設定しますか?

14
Abhishek

JVMを起動する前にumask(2)を_0_に設定すると、作成されたすべてのファイルとディレクトリは、すべてのユーザーに完全な権限で作成されます。これはおそらく悪い考えです。

File.setReadable()_File.setWritable_ APIを使用して、ファイルの作成後にモードビットをいじることができます。アクセス許可を付与する場合は、これで十分なことがよくあります。他のユーザーからアクセス許可をremoveしようとしている場合は、最初から非常に限定的にアクセス許可を設定する必要があります。 (umask(0777) JVMを起動する前に、必要な場所にアクセス許可を正確に追加します。)

15
sarnold

3つの方法を使用できます。

setReadalble(boolean boolean)
setWritable(boolean、boolean)
setExecutable(boolean、boolean)

これはファイルを「0777」に設定します

String path = "SOME/PATH";

final File file = new File(path);
file.setReadable(true, false);
file.setExecutable(true, false);
file.setWritable(true, false);
22
ratchet freak

Java SE 7には Java.nio.file.attribute.PosixFileAttributes があり、所有者、グループなどに対する読み取り、書き込み、実行のアクセス許可をきめ細かく制御できます。

import Java.nio.file.*;
import Java.nio.file.attribute.*;
import Java.util.Set;

public class Test {
    public static void main(String[] args) throws Exception {
        Path path = Paths.get("/tmp/test-file.txt");
        if (!Files.exists(path)) Files.createFile(path);
        Set<PosixFilePermission> perms = Files.readAttributes(path,PosixFileAttributes.class).permissions();

        System.out.format("Permissions before: %s%n",  PosixFilePermissions.toString(perms));

        perms.add(PosixFilePermission.OWNER_WRITE);
        perms.add(PosixFilePermission.OWNER_READ);
        perms.add(PosixFilePermission.OWNER_EXECUTE);
        perms.add(PosixFilePermission.GROUP_WRITE);
        perms.add(PosixFilePermission.GROUP_READ);
        perms.add(PosixFilePermission.GROUP_EXECUTE);
        perms.add(PosixFilePermission.OTHERS_WRITE);
        perms.add(PosixFilePermission.OTHERS_READ);
        perms.add(PosixFilePermission.OTHERS_EXECUTE);
        Files.setPosixFilePermissions(path, perms);

        System.out.format("Permissions after:  %s%n",  PosixFilePermissions.toString(perms));
    }
}

これは次のように使用できます:

$ rm -f /tmp/test-file.txt && javac Test.Java && Java Test
Permissions before: rw-r--r--
Permissions after:  rwxrwxrwx
15