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

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

博客原文参考链接:http://tech.limuqiao.com/archives/40.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值