【问题标题】:Create directory without Read-Only attribute on windows in Java在Java中的Windows上创建没有只读属性的目录
【发布时间】: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)支持的不可变文件属性/标志形成对比,后者确实作用于目录的内容。

标签: java windows directory nio file-permissions


【解决方案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 参数,不过感谢您的回答!
猜你喜欢
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2010-11-06
  • 2020-04-08
  • 2011-04-21
  • 2010-11-24
相关资源
最近更新 更多