Java 我正在使用Files.move函数移动文件,但它不继承父文件夹权限
我正在尝试将文件从一个目录移动到另一个目录。问题是,当文件位于其新目录中时,它们保留以前的权限,而不是为该文件夹设置的新权限 我正在本地机器/客户机上的Java 8应用程序中尝试这一点。我试图寻找答案,但我只找到了Linux和C#示例 我曾尝试在OS/Server中更改ACL权限更改设置,但Windows已正确处理ACL权限交换,只是Java代码忽略了这一点 我真的想使用move方法,而不是copy+delete方法 这是我使用的唯一一行代码:Java 我正在使用Files.move函数移动文件,但它不继承父文件夹权限,java,file,permissions,system,Java,File,Permissions,System,我正在尝试将文件从一个目录移动到另一个目录。问题是,当文件位于其新目录中时,它们保留以前的权限,而不是为该文件夹设置的新权限 我正在本地机器/客户机上的Java 8应用程序中尝试这一点。我试图寻找答案,但我只找到了Linux和C#示例 我曾尝试在OS/Server中更改ACL权限更改设置,但Windows已正确处理ACL权限交换,只是Java代码忽略了这一点 我真的想使用move方法,而不是copy+delete方法 这是我使用的唯一一行代码: Files.move(pdfFile.toPath
Files.move(pdfFile.toPath()、path.get(newFileWithoutExtension+“.pdf”)、StandardCopyOption.REPLACE_EXISTING)代码>
我希望我要移动到新目录的文件将继承为该目录设置的ACL权限
当前移动的文件在创建它们的位置保留它们自己的ACL权限,这与预期不同
编辑1:将权限更改为ACL权限。第一个问题是:是否要使其在Unix/Windows上可移植?
因为每个操作系统都有特定的文件属性。
对于便携式解决方案(大多数操作系统共有的属性):
从要移动到的目标文件夹中获取基本文件属性。例如:
BasicFileAttributes BasicAttributes=Files.readAttributes(file,BasicFileAttributes.class)
为每个移动的文件设置属性
对于特定于操作系统的解决方案,您可以使用以下选项,而不是基本文件属性:
- DosFileAttributes适用于Windows:
DosFileAttributes attrs=Files.readAttributes(文件,DosFileAttributes.class);
//获取属性值
布尔isArchive=attrs.isArchive()
布尔值ishiden=attrs.ishiden()
布尔值isReadOnly=attrs.isReadOnly()
布尔值isSystem=attrs.isSystem()
//在新文件中设置属性
setAttribute(新文件,“dos:archive”,isArchive)
setAttribute(新文件,“dos:隐藏”,isHidden)
setAttribute(新文件,“dos:readonly”,isReadOnly)
setAttribute(新文件,“dos:system”,isSystem)
-PosixFileAttributes用于Unix您的观察结果
当前移动的文件在创建它们的位置保留它们自己的ACL权限,这与预期不同
似乎是预期的行为。下面是Microsoft支持文章
默认情况下,对象在创建时或复制或移动到其父文件夹时从其父对象继承权限。当您将对象移动到同一卷上的不同文件夹时,此规则的唯一例外情况发生。在这种情况下,保留原始权限
谢谢你的回复,但是我从哪里可以获得使用这个的权限呢?我检查了JDocs,但没有找到任何可以这样做的方法?大多数方法只返回boolean.BasicFileAttributes basAtr=Files.readAttributes(file,BasicFileAttributes.class);当我这样做的时候,我确实得到了这种类型的对象,但是我能用它做什么呢?我没有看到可以调用的方法来查看为此文件设置了哪些权限,或者没有将所有属性从一个文件复制到另一个文件的方法?很抱歉忘记了操作系统的问题,这将是Windows的唯一。啊,是的,但那些我看到的,但这是否包括哪些用户有哪些权限?我觉得不是这样的?也许我误解了我的意思,但我们对不同的用户和组有不同的权限。Windows中每个组和用户的权限?那不存在。你指的是什么权限?DOS权限(可通过attrib
设置)或ACL权限(可通过icacls
设置)?@次优我是指ACL权限,抱歉,我不知道它们被称为次优。我将编辑我的原始问题,将其包括在内。