读取文件的修改时间,一般情况下,可能比较容易写出类似以下的代码,请注意看代码中的注释分析
这个有bug的代码不要直接使用
File path=new File("文件夹地址");
//列出该目录下所有文件和文件夹
File[] files = path.listFiles();
//按照目录中文件最后修改日期实现倒序排序
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
/**
*注意:直接将文件的修改时间的差值从long转化为int,在两个文件修改时间
*相差较远时,可能会有数据范围溢出问题,导致大值差数(超过2147483647)直接变为负值int而返回
**/
return (int)(file2.lastModified()-file1.lastModified());
}
});
//取最新修改的文件,get文件名
String latestFileName = files[0].getName();
修复bug后,可以使用的正确代码写法
/** 读取特定目录下最新的文件名称
* @param filePath
* @return
*/
public static String getLatestFile(String filePath ) {
// 获取最新改动的文件名
File path = new File(filePath);
String latestFile = "";
if (path.exists()) {
// 列出该目录下所有文件和文件夹
File[] files = path.listFiles();
// LOG.info("Files in "+fileName+", files num="+files.length);
// 按照文件最后修改日期倒序排序
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
Long result = file2.lastModified() - file1.lastModified();
//先将Long的差值算出,然后视该值是否会超越int的最大值,然后返回不同结果
return result>=Integer.MAX_VALUE?Integer.MAX_VALUE:result.intValue();
}
});
latestFile = files[0].getName();
}else{
LOG.error("the latest file path is not exist:"+filePath);
latestFile = "";
}
return latestFile;
}
Comments | NOTHING