java读取目录下最新修改的文件--注意int值的取值范围


读取文件的修改时间,一般情况下,可能比较容易写出类似以下的代码,请注意看代码中的注释分析

这个有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;
    }

声明:梨木乔の技术栈|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - java读取目录下最新修改的文件--注意int值的取值范围


梨木乔の技术栈