Java 我正在使用Files.move函数移动文件,但它不继承父文件夹权限

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

我正在尝试将文件从一个目录移动到另一个目录。问题是,当文件位于其新目录中时,它们保留以前的权限,而不是为该文件夹设置的新权限

我正在本地机器/客户机上的Java 8应用程序中尝试这一点。我试图寻找答案,但我只找到了Linux和C#示例

我曾尝试在OS/Server中更改ACL权限更改设置,但Windows已正确处理ACL权限交换,只是Java代码忽略了这一点

我真的想使用move方法,而不是copy+delete方法

这是我使用的唯一一行代码:

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权限,抱歉,我不知道它们被称为次优。我将编辑我的原始问题,将其包括在内。