我正在寻找一种有效的方法来检索ctime信息存储在sun.nio.fs.UnixFileAttributes
期间Files.walkFileTree
:
Files.walkFileTree(root, EnumSet.noneOf(FileVisitOption.class), Integer.MAX_VALUE, new FileVisitor<Path>() {
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
// get ctime from BasicFileAttributes here
}
}
Java 8 有一个 hack:可以使用反射来访问UnixFileAttributes.ctime()
。然而,此代码需要更改ctime()
- 对于 Java 9 将失败的方法InaccessibleObjectException
.
Class<?> basicFileAttributesClass = Class.forName("java.nio.file.attribute.BasicFileAttributes");
Class<?> unixFileAttributesClass = Class.forName("sun.nio.fs.UnixFileAttributes");
Method toUnixFileAttributesMethod = unixFileAttributesClass.getDeclaredMethod("toUnixFileAttributes", basicFileAttributesClass);
toUnixFileAttributesMethod.setAccessible(true);
Method cTimeMethod = unixFileAttributesClass.getDeclaredMethod("ctime");
cTimeMethod.setAccessible(true);
Object unixFileAttributes = toUnixFileAttributesMethod.invoke(unixFileAttributesClass, attributes);
((FileTime)cTimeMethod.invoke(unixFileAttributes)).toMillis();
我仍然希望错过一些完成这项工作的 NIO 实用程序方法。
对于 Java 9 及更高版本,setAccessible()
检查您的模块没有的模块权限。这可以通过 VM 选项解锁--add-opens java.base/sun.nio.fs=ALL-UNNAMED
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)