在Java中的Windows上创建没有只读属性的目录
Posted
技术标签:
【中文标题】在Java中的Windows上创建没有只读属性的目录【英文标题】:Create directory without Read-Only attribute on windows in Java 【发布时间】:2019-01-16 22:06:33 【问题描述】:我一直在努力弄清楚如何在 Windows 上使用以下方法创建没有只读属性的目录:
Files.createDirectory(path, attrs);
attrs
属性对我来说不清楚,我能找到的唯一示例是使用 POSIX 标准的示例:
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rwxr-x---");
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);
Files.createDirectory(file, attr);
我想知道是否有办法为 Windows 系统创建 FileAttribute
以取消设置 ReadOnly
属性。 p>
现在我只创建目录,不关注attrs
参数,并在创建目录后编辑属性。
谢谢
【问题讨论】:
如果您的文件系统支持/使用 ACL,请查看AclFileAttributeView
和相关类。我对此了解不多,但也许你会找到你要找的东西。在类 javadoc 的底部,它谈到在 FileAttribute
中使用 AclEntry
对象。
仅供参考,在目录上设置 readonly 属性只能防止空目录被删除,而不是目录的内容。所以它实际上并没有创建一个“只读”目录。这与某些 Unix 系统(如 Linux 和 BSD)支持的不可变文件属性/标志形成对比,后者确实作用于目录的内容。
【参考方案1】:
所以,据我所知,这是一个 Windows 问题,而不是 Java 问题。可能是在您努力寻找答案的时候。
在 windows 中创建文件时遵循操作系统的默认权限集,在 linux 中笑。如果您想使用不同的权限创建它,请首先设置您的操作系统默认权限,它们应该应用于您的文件。
我希望我知道一种更简洁的方法。不幸的是,我没有,对不起。 Source
编辑:嘿,你每天都会学到一些新东西,Oracle 添加了一个 setWritable。这可能会解决您的问题!
File file = new File("DemoFile");
if(file.setWritable(false))
System.out.println("Successful");
else
System.out.println("Well thats unfortunate, guess I was wrong");
if(file.setWritable(true))
System.out.println("Re-enabled writing");
else
System.out.println("Failed to re-enable writing on file.");
祝你有美好的一天!
【讨论】:
好吧,实际上我的问题不是关于如何取消设置参数,而是更多关于如何在 Windows 系统中的Files.createDirectory(path, attrs);
方法中使用 FileAttribute
参数,不过感谢您的回答!以上是关于在Java中的Windows上创建没有只读属性的目录的主要内容,如果未能解决你的问题,请参考以下文章
python ≥3.9 中的只读类属性,支持 `help()`
在C# winform 程序里设置 DataGrid 为只读属性。