【发布时间】:2011-08-29 16:03:06
【问题描述】:
是否可以做一个等效的 'find . JDK7中的-ctime n'(Unix命令)?即根据上次更改时间查找所有文件? 我查看了新的 FileVisitor/BasicFileAttributes/SimpleFileVisitor 类,但看不到它是如何完成的。
【问题讨论】:
标签: java java-7 file-attributes filetime
是否可以做一个等效的 'find . JDK7中的-ctime n'(Unix命令)?即根据上次更改时间查找所有文件? 我查看了新的 FileVisitor/BasicFileAttributes/SimpleFileVisitor 类,但看不到它是如何完成的。
【问题讨论】:
标签: java java-7 file-attributes filetime
以下对我有用(使用 Files.walkFileTree 和 FileVisitor):
FileTime ctime = (FileTime) Files.getAttribute(path, "unix:ctime");
【讨论】:
在 JDK 7 论坛中有 discussion opened 讨论该主题
它基本上说:
来自creationTime的描述“如果 文件系统实现确实 不支持时间戳来表示 创建文件的时间 然后这个方法返回一个 实现特定的默认值, 通常是最后修改时间或 FileTime 代表纪元 (1970-01-01T00:00:00Z)”。所以 您观察到的行为是预期的。这 上次状态更改的时间是 如果您真的需要它,请尝试 Files.getAttribute(路径, "unix:ctime")。
所以,你自己的答案似乎是正确的。
【讨论】:
您可以通过在文件属性对象上调用getCreationTime() 来获取文件的创建时间。您可以使用Files.walkFileTree 和FileVisitor 进行目录树遍历。把这些放在一起,你就可以实现find . -ctime n了。
【讨论】:
creationTime 的 javadoc 是这样说的:
如果文件系统实现不支持时间戳来指示文件的创建时间,则此方法返回特定于实现的默认值,通常是最后修改时间或表示纪元的 FileTime (1970-01 -01T00:00:00Z)。
由于在 Unix/Linux 上创建不典型,因此该方法返回最后修改时间。
【讨论】: