Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 9:如何在FileVisitor.visitFile()中检索ctime?_Java_Nio - Fatal编程技术网

Java 9:如何在FileVisitor.visitFile()中检索ctime?

Java 9:如何在FileVisitor.visitFile()中检索ctime?,java,nio,Java,Nio,我正在寻找一种有效的方法来检索存储在sun.nio.fs.UnixFileAttributes中的ctime信息,方法是在Files.walkFileTree期间: Files.walkFileTree(root, EnumSet.noneOf(FileVisitOption.class), Integer.MAX_VALUE, new FileVisitor<Path>() { public FileVisitResult visitFile(Path file, BasicF

我正在寻找一种有效的方法来检索存储在
sun.nio.fs.UnixFileAttributes
中的ctime信息,方法是在
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
  }
}

我仍然希望错过一些NIO实用程序方法来完成这项工作。

哪个操作系统仍然有效?我很好奇为什么不能使用attrs.creationTime()?问题出在Linux/OSX上。API只提供
BasicFileAttributes
,因为
sun.nio.fs.UnixFileAttributes
依赖于平台。BasicFileAttributes定义creationTime方法,以尽可能公开文件创建时间。应该没有理由在实现类中到处乱翻。creationTime不是Unix ctime(“更改的时间”)。啊,好的,您正在查看上次的更改时间,API中除了使用Files.readAttributes(文件,“Unix:ctime”)外,不支持这一点。它可能会通过PosixFileAttributes以类型安全的方式公开,但从来都不是优先考虑的(我也不记得nio开发中会提到它)。
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();