在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上创建没有只读属性的目录的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin中的动态只读字段

JAXB 可以创建“只读”类属性吗?

python ≥3.9 中的只读类属性,支持 `help()`

在C# winform 程序里设置 DataGrid 为只读属性。

Windows 7 上的 XAMPP。Htdocs 文件夹似乎是只读的

创建一流的对象,它的所有实例属性都是只读的,就像切片一样?