首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java9:如何在FileVisitor.visitFile()中检索ctime?

Java9:如何在FileVisitor.visitFile()中检索ctime?
EN

Stack Overflow用户
提问于 2017-10-10 21:25:33
回答 1查看 115关注 0票数 2

我正在寻找一种有效的方法来检索存储在sun.nio.fs.UnixFileAttributes中的Files.walkFileTree中的ctime信息

代码语言:javascript
复制
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有一个黑客:反射可以用来访问UnixFileAttributes.ctime()。但是,这段代码需要更改ctime()-method的可访问性,这对于InaccessibleObjectException来说将失败。

代码语言:javascript
复制
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实用程序方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-14 15:12:21

对于Java9和更高版本,setAccessible()检查模块权限,而您的模块没有这些权限。可以使用VM选项--add-opens java.base/sun.nio.fs=ALL-UNNAMED解锁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46676279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档