如何获取文件上次更改时间(Unix + Java)

时间:2016-01-18 10:31:23

标签: java file unix stat

在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编程时,我可以很容易地获得最后的修改时间。但是如何获取文件的最后更改时间?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您需要使用java NIO.2功能。 NIO.2附带BasicFileAttributeView。

BasicFileAttributeView支持以下属性来获取信息

“basic:creationTime”创建文件的确切时间。 “basic:lastAccessTime”文件加入的最后一次。 “basic:lastModifiedTime”上次修改文件的时间。

似乎没有更改时间(更改文件属性时更改时间会更新,例如更改所有者,更改权限或将其移动到其他文件系统,但在修改文件时也会更新。)选项在java中可用。 但我们可以直接执行unix命令并解析结果。示例代码片段

 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);