java.io.file.setwritable()的java.nio.file.files等价物是什么?

hsgswve4  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(451)

这个 java.io.File.setWritable() 方法允许您将一个文件设置为可供以独立于平台的方式支持此功能的文件系统上的每个人写入。
https://docs.oracle.com/javase/7/docs/api/java/io/file.html#setwritable(布尔值,%20boolean)
是什么允许在 java.nio.file.Path 反对?
静态法 java.nio.file.Files.setAttribute() 意味着可以设置权限,
但是没有一套明确的参数来模拟 java.io.File.setWritable() 方法。
https://docs.oracle.com/javase/7/docs/api/java/nio/file/files.html#setattribute(java.nio.file.path、%20java.lang.string、%20java.lang.object、%20java.nio.file.linkoption…)

dy2hfwbg

dy2hfwbg1#

nio扩展了java的io,但它并不是现有类的完全替代品。这个 java.io.File 类也没有被弃用。为了 java.io.File.setWritable() 这里面没有等价物 java.nio.file.Files . 正如前面的回答中已经提到的,您仍然可以将path对象转换为file对象并调用 setWritable .
nio引入了文件属性视图的概念,并允许访问例如访问控制列表(acl)和用户定义的文件属性。e、 g.在Windows上 setWritable 仅对只读标志(文件资源管理器中的第一个选项卡)有效,但对ACL无效(请参见文件资源管理器中的“安全”选项卡)。即使你打电话来 file.setWritable(false) 所有者仍有写入权限,但由于设置了只读标志,最终无法写入。
因为并不是所有的操作系统都是posix兼容的(欢迎redmond;-)并非所有文件属性视图在所有操作系统上都可用。下面的代码或多或少与 java.io.File.setWritable :

public static boolean setWriteable(Path path, boolean writeable) {

    try {
        PosixFileAttributeView posix = Files.getFileAttributeView(path, PosixFileAttributeView.class);

        if (posix != null) {

            // POSIX
            Set<PosixFilePermission> permissions = new HashSet<>(posix.readAttributes().permissions());
            boolean changed = false;
            if (writeable) {
                changed = permissions.add(PosixFilePermission.OWNER_WRITE);
            } else {
                changed = permissions.remove(PosixFilePermission.OWNER_WRITE);
            }

            if (changed) {
                posix.setPermissions(permissions);
            }
            return true;

        } else {

            // Windows - does not support POSIX file permission view
            DosFileAttributeView dos = Files.getFileAttributeView(path, DosFileAttributeView.class);
            if (dos != null) {
                dos.setReadOnly(!writeable);
            }
            return true;
        }

    } catch (IOException e) {
        return false;
    }
}

所以,如果你只是想改变一个文件的只读标志,我会留下来 File.setWritable . 它很简单,您不必关心操作系统/支持的文件属性视图。如果需要更多(例如,更改文件的所有者/组或读取/更改ACL),则应选择文件属性视图。

y0u0uwnf

y0u0uwnf2#

在路径的关联文件对象上使用“setwritable”:

import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;

    public class Permissions {
      public static void main(String[] args) throws Exception {
        Path current = Paths.get(".");
        Path path = Files.createFile(current.resolve("permissions.txt"));
        path.toFile().setWritable(true, false);
      }
    }

相关问题