【问题标题】:Is it possible to do a 'find . -ctime n' in JDK7?有没有可能做一个'find . JDK7中的-ctime n'?
【发布时间】:2011-08-29 16:03:06
【问题描述】:

是否可以做一个等效的 'find . JDK7中的-ctime n'(Unix命令)?即根据上次更改时间查找所有文件? 我查看了新的 FileVisitor/BasicFileAttributes/SimpleFileVisitor 类,但看不到它是如何完成的。

【问题讨论】:

    标签: java java-7 file-attributes filetime


    【解决方案1】:

    以下对我有用(使用 Files.walkFileTree 和 FileVisitor):

    FileTime ctime = (FileTime) Files.getAttribute(path, "unix:ctime");

    【讨论】:

      【解决方案2】:

      在 JDK 7 论坛中有 discussion opened 讨论该主题

      它基本上说:

      来自creationTime的描述“如果 文件系统实现确实 不支持时间戳来表示 创建文件的时间 然后这个方法返回一个 实现特定的默认值, 通常是最后修改时间或 FileTime 代表纪元 (1970-01-01T00:00:00Z)”。所以 您观察到的行为是预期的。这 上次状态更改的时间是 如果您真的需要它,请尝试 Files.getAttribute(路径, "unix:ctime")。

      所以,你自己的答案似乎是正确的。

      【讨论】:

        【解决方案3】:

        您可以通过在文件属性对象上调用getCreationTime() 来获取文件的创建时间。您可以使用Files.walkFileTreeFileVisitor 进行目录树遍历。把这些放在一起,你就可以实现find . -ctime n了。

        【讨论】:

        • 创建时间和上次修改时间不一样。我已经尝试过 getCreationTime()、lastAccessTime() 和 lastModifiedTime()。他们都没有模仿-ctime。
        • 作为另一个例子,如果我按 getCreationTime() 排序,那么这将相当于 'ls -lt',但我想要做的是 'ls -ltc'排序。
        • 经过进一步调查,我认为 getCreationTime() 已损坏。似乎 getCreationTime() 和 lastModifiedTime() 返回相同的值。
        【解决方案4】:

        creationTime 的 javadoc 是这样说的:

        如果文件系统实现不支持时间戳来指示文件的创建时间,则此方法返回特定于实现的默认值,通常是最后修改时间或表示纪元的 FileTime (1970-01 -01T00:00:00Z)。

        由于在 Unix/Linux 上创建不典型,因此该方法返回最后修改时间。

        【讨论】:

          猜你喜欢
          • 2012-02-24
          • 2016-03-05
          • 2021-07-07
          • 1970-01-01
          • 2012-04-18
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 2011-08-02
          相关资源
          最近更新 更多