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