在java.nio2

时间:2015-10-05 16:53:19

标签: java nio2

我很困惑......根据this Java pageFile.setReadOnly()函数现在是一个“遗留”函数,应该被Files.setAttribute()取代......但这需要你知道您是使用DOS还是POSIX文件系统。我只是想以独立于平台的方式使文件成为只读文件。我该怎么办?

1 个答案:

答案 0 :(得分:7)

我相信甲骨文只是在称他们为#34;遗产"根据新的 java.nio.file API。如果他们真的想阻止它的使用,他们会弃用这些方法。

但是如果您仍然想使用NIO2,为了保持一致性,您可以查询平台的基础FileStore以查找 DOS POSIX < / em>属性支持。

Path file = Paths.get("file.txt");

// Files.createFile(file);
System.out.println(Files.isWritable(file)); // true

// Query file system
FileStore fileStore = Files.getFileStore(file);
if (fileStore.supportsFileAttributeView(DosFileAttributeView.class)) {
    // Set read-only
    Files.setAttribute(file, "dos:readonly", true);
} else if (fileStore.supportsFileAttributeView(PosixFileAttributeView.class)) {
    // Change permissions
}
System.out.println(Files.isWritable(file)); // false

您还可以使用FileAttributeView个类轻松更新多个属性。

DosFileAttributeView attrs =
            Files.getFileAttributeView(
                        file, DosFileAttributeView.class);
attrs.setSystem(true);
attrs.setHidden(true);
attrs.setReadOnly(true);