【问题标题】:How to get a files last changed time (Unix + Java)如何获取文件上次更改时间(Unix + Java)
【发布时间】:2016-01-19 17:08:26
【问题描述】:

在 Unix 中,上次更改时间和上次修改时间之间存在差异。例如,当使用 stat 我可以得到:

Access: 2016-01-18 10:50:01.624303144 +0100
Modify: 2016-01-12 13:34:18.274639073 +0100
Change: 2016-01-15 13:13:52.881401711 +0100

当我用 Java 编程时,我可以很容易地得到最后修改时间。但是如何获取文件的最后更改时间?

【问题讨论】:

  • 似乎任何 FileAttributeView 都不支持该属性。只有“lastAccessTime”、“creationTime”和“lastModifiedTime”可用。该“更改”时间将是最后一次更改权限等元数据的时间。
  • 正确。我认为是这样,因为 Java 必须支持所有操作系统。但感觉应该可以从一个操作系统请求特定属性

标签: java file unix stat


【解决方案1】:

设法找到一个缓慢的解决方案。复制到这里,以防以后有人遇到同样的问题。

//Get time since epoch for a file
private static long getLastChanged(final String fileName) {
    try {
        ProcessBuilder processBuilder = new ProcessBuilder("stat", fileName, "-c", "%Z");
        Process process = processBuilder.start();
        int errorCode = process.waitFor();
        if (errorCode == 0) {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                return Integer.parseInt(line);
            }
        } else {
            System.out.println("Stat failed with error message: " + errorCode);
        }
    } catch (Exception e) {
        System.out.println("Failed to do stat on file: " + e);
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    您需要使用 java NIO.2 特性。 NIO.2自带BasicFileAttributeView。

    BasicFileAttributeView 支持以下属性获取信息

    "basic:creationTime" 创建文件的确切时间。 “basic:lastAccessTime” 最后一次访问文件的时间。 “basic:lastModifiedTime” 文件最后一次修改的时间。

    似乎没有更改时间(更改时间会在文件属性更改时更新,例如更改所有者,更改权限或将其移动到另一个文件系统,但也会在您修改文件时更新。)选项在java中可用。 但是我们可以通过直接执行unix命令并解析结果来实现。示例代码sn-ps

     String command []  = String new String [] {"stat" , "filename"} ;  
     Process process = new ProcessBuilder(args).start();
     InputStream is = process.getInputStream();
     InputStreamReader isr = new InputStreamReader(is);
     BufferedReader br = new BufferedReader(isr);
    

    【讨论】:

    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2011-04-30
    • 2021-11-22
    • 1970-01-01
    • 2017-06-20
    • 2015-10-09
    相关资源
    最近更新 更多