如何解决使用JAVA更改目录中所有文件的权限
我想编写一段代码,以便将目录中的所有文件设置为可写(非只读)。 我的程序在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)更改权限,并且该设置自动应用于目录及其子目录中包含的所有文件?
解决方法
您可以参考this Github仓库-它具有用于更改Windows,* Nix甚至MacO权限的实现。可以找到相关代码here。
代码可能会更旧,但是实现仍然可以正常工作。
,在Java中,如果您不想产生操作系统实用程序来执行此操作,则需要处理代码中的目录递归。实现一个函数,该函数将代表目录的File
作为其参数。使用File.listFiles()
展开目录中的文件,然后使用File.isDirectory()
测试每个文件是否为目录。如果是目录,请使用新目录递归调用自己。
有很多需要注意的地方-例如,如果目录中出现“ ..”目录,则不想显式展开。您可能需要检查循环链接。您可能需要将扩展限制为特定的深度或特定的设备,等等。
它需要大量代码才能以有用且健壮的方式进行此扩展,但是,如果您组织得当,则只需编写一次。
,这是我能想到的。您可以通过调用Runtime.getRuntime().exec(//The command of your OS that allows user to change folder permission)
来使用CLI。这应该是最简单的方法。
此外,如果您熟悉C或C ++并使用Windows,则可以查看JNA库来访问Windows的本机功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。