【问题标题】:Change permission for all files inside a directory using JAVA使用 JAVA 更改目录内所有文件的权限
【发布时间】:2020-12-26 02:14:09
【问题描述】:

我想编写一段代码,以便将目录中的所有文件设置为可写(非只读)。 我的程序是 JAVA 的,它应该可以在 Windows 和 Linux 上运行。到目前为止,我的方法是遍历目录中包含的所有文件,并为每个文件设置可写权限,使用以下方法:

  static void makeDosFileWritable(Path pathToFile) {
    try {
      Files.setAttribute(pathToFile.toAbsolutePath(), "dos:readonly", false);
       //logs
    } catch (IOException e) {
       //logs
    }
  }


  static void makeUnixFileWritable(Path pathToFile) {
    try {
      Set<PosixFilePermission> ownerWritable = PosixFilePermissions.fromString("rw-rw-rw-");
      Files.setPosixFilePermissions(pathToFile, ownerWritable);
     //logs
    } catch (IOException e) {
     //logs
    }
  }

这很好用。问题是,在顶级目录中,我也可以有嵌套目录。我想知道如何处理。

  • 是否应该递归遍历每个(子)目录并更改每个文件的权限?
  • 或者,是否有办法以编程方式 (JAVA) 仅在顶级目录级别更改权限,并且该设置自动应用于目录及其子目录中包含的所有文件?

【问题讨论】:

    标签: java path file-permissions


    【解决方案1】:

    这是我能想到的。您可以通过调用 Runtime.getRuntime().exec(//The command of your OS that allows user to change folder permission) 来改用 CLI。这应该是最简单的方法了。

    此外,如果您熟悉 C 或 C++ 并使用 Windows,可以查看JNA 库以访问本机 Windows 函数。

    【讨论】:

      【解决方案2】:

      您可以参考this Github 存储库 - 它具有更改 Windows、*Nix 甚至 MacO 权限的实现。相关代码可以在here找到。

      代码可能较旧,但实现应该仍然有效。

      【讨论】:

        【解决方案3】:

        在 Java 中,如果您不想生成操作系统实用程序来执行此操作,则需要在代码中处理目录递归。实现一个函数,该函数将代表一个目录的File 作为其参数。使用例如File.listFiles() 展开目录中的文件,然后使用File.isDirectory() 测试每个文件是否是目录。如果是目录,则使用新目录递归调用自己。

        有很多事情需要注意——例如,如果“..”目录出现在列表中,您不想显式展开它。您可能需要检查循环链接。您可能希望将扩展限制到特定深度或特定设备等。

        需要大量代码才能以一种有用且健壮的方式进行此扩展,但如果您组织良好,则只需编写一次。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-01
          • 2012-04-03
          • 1970-01-01
          • 1970-01-01
          • 2013-09-19
          • 1970-01-01
          • 2015-12-16
          • 2011-12-30
          相关资源
          最近更新 更多