在 java.nio2 中将路径设置为只读的正确方法

Posted

技术标签:

【中文标题】在 java.nio2 中将路径设置为只读的正确方法【英文标题】:right way to set a Path to readonly in java.nio2 【发布时间】:2016-01-02 10:02:51 【问题描述】:

我很困惑...根据this Java page,File.setReadOnly() 函数现在是“旧版”函数,应该替换为Files.setAttribute()...但这需要您知道您是否正在使用DOS 或 POSIX 文件系统。我只想以独立于平台的方式将文件设为只读。我该怎么做?

【问题讨论】:

【参考方案1】:

我相信甲骨文只是根据新的 java.nio.file API 称它们为“遗留”。如果他们真的想阻止它的使用,他们就会弃用这些方法。

但如果您仍然想使用 NIO2,比如说为了保持一致性,您可以查询平台的底层 FileStore 以获得 DOSPOSIX 属性支持。

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);

【讨论】:

以上是关于在 java.nio2 中将路径设置为只读的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

在python中将`QTableWidget`中的一整列设置为只读

在jpa中将持久性上下文设置为只读

如何在 Yii2 中将 textInput 设置为只读?

如何在 Msys 或 Cygwin 中将文件设置为只写或只读?

在Django Admin中将预填充的段塞字段设置为只读

将行设置为只读