我正在寻找一种有效的方法来检索sun.nio.fs.UnixFileAttributes
期间存储在Files.walkFileTree
中的 ctime 信息:
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()
- 方法的可访问性,对于带有InaccessibleObjectException
的Java 9,该方法将失败。
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实用工具。