遍历磁盘中7天内修改过的文件,按照从新到旧打印

遍历一个文件夹,找出其中七天内修改过的文件,并且按时间从新到旧进行打印出来,代码如下:

package com.freshbin.file;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class SortFile {

	public static void main(String[] args) throws ParseException {
		File filePath = new File("D:/");
		ArrayList<String> fileList = (ArrayList<String>) sortFileByModifyTime(filePath);
		for(String s : fileList) {
			System.out.println(s);
		}
	}
	

	/**
	 * 获取7天内修改过的文件并按最新到最旧排序
	 * @param filePath
	 * @return
	 * @throws ParseException
	 */
	public static ArrayList<String> sortFileByModifyTime(File filePath) throws ParseException {
		HashMap<String, String> fileMap = new HashMap<>();
		getFile(filePath, fileMap);
		getValueFile(fileMap);
		ArrayList<String> fileList = (ArrayList<String>) sortFile(fileMap);
		return fileList;
	}
	
	/**
	 * 获取所有文件
	 * @param filePath
	 * @param fileMap
	 * @return
	 */
	public static Map<String, String> getFile(File filePath, HashMap<String, String> fileMap) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		if(filePath.isDirectory()) {
			File[] files = filePath.listFiles();
			if(files != null) {//因为磁盘中有可能会遇到不能访问的文件,所以导致files为null,因此要加一个判断
				for(File file : files) {
					if(file.isDirectory()) {
						long time = file.lastModified(); 
						fileMap.put(file.getAbsolutePath(), simpleDateFormat.format(time));
						getFile(file, fileMap);
					} else {
						long time = file.lastModified(); 
						fileMap.put(file.getAbsolutePath(), simpleDateFormat.format(time));
					}
				}
			}
		} else {
			long time = filePath.lastModified(); 
			fileMap.put(filePath.getAbsolutePath(), simpleDateFormat.format(time));
		}


		return fileMap;
	}
	
	/**
	 * 获取7天内修改过的文件
	 * @param fileMap
	 * @return
	 * @throws ParseException 
	 */
	public static Map<String, String> getValueFile(HashMap<String, String> fileMap) throws ParseException {
		Calendar valueTime = Calendar.getInstance();
		Calendar fileTime = Calendar.getInstance();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//		valueTime.roll(Calendar.DATE, -7);//DATE是在当前月份滚动
		valueTime.roll(Calendar.DAY_OF_YEAR, -7);//DAY_OF_YEAR是在一年之中滚动
		Date valueDate =  valueTime.getTime();
		
		//Map迭代过程中要删除元素的话,必须要用迭代器模式迭代,不然使用map自身的remove方法
		//会引发异常
		Iterator<Entry<String, String>> fileSet = fileMap.entrySet().iterator();
		while(fileSet.hasNext()) {
			Entry<String, String> fileEntry = fileSet.next();
			String fileName = fileEntry.getKey();
			String fTime = fileEntry.getValue();
			fileTime.setTime(simpleDateFormat.parse(fTime));
			Date fileDate = fileTime.getTime();
			if(valueDate.getTime() < fileDate.getTime()) {
				continue;
			} else {
				fileSet.remove();
			}
		}	
		
		return fileMap;
	}
	
	/**
	 * 按照修改日期从最新到最旧排序
	 * @param filePath
	 * @param fileMap
	 * @return
	 * @throws ParseException 
	 */
	public static List<String> sortFile(HashMap<String, String> fileMap) throws ParseException {
		//第一种做法
/*		Set<Entry<String, String>> fileSet = fileMap.entrySet();
		int size = fileSet.size();
		ArrayList<String> fileList = new ArrayList<>();//存放要最终返回的集合
		String[] keyList = new String[size];//文件名集合
		String[] valueList = new String[size];//文件修改时间集合
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		Calendar valueTime1 = Calendar.getInstance();
		Calendar valueTime2 = Calendar.getInstance();
		int i = 0;
		
		for(Entry<String, String> entry : fileSet) {
			keyList[i] = entry.getKey();
			valueList[i] = entry.getValue();
			i++;
		}
		
		//冒泡循环比较修改时间
		for(int k = 0; k < size - 1; k++) {
			for(int j = 0; j < size - 1 - k; j++) {
				String fileTime1 = valueList[j];
				String fileTime2 = valueList[j + 1];
				valueTime1.setTime(simpleDateFormat.parse(fileTime1));
				valueTime2.setTime(simpleDateFormat.parse(fileTime2));
				Date timeDate1 = valueTime1.getTime();
				Date timeDate2 = valueTime2.getTime();
				
				if(timeDate1.getTime() < timeDate2.getTime()) {
					String valuetemp = valueList[j];
					valueList[j] = valueList[j+1];
					valueList[j+1] = valuetemp;
					
					String keytemp = keyList[j];
					keyList[j] = keyList[j+1];
					keyList[j+1] = keytemp;
				}
			}
		}
		
		for(int z = 0; z < size; z++) {
			fileList.add(keyList[z] + " " + valueList[z]);
		}*/
		
		//第二种做法
		ArrayList<String> fileLists = new ArrayList<>();//存放要最终返回的集合
		ArrayList<Map.Entry<String, String>> fileList = new ArrayList<>(fileMap.entrySet());//存放要排序的集合
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		Calendar valueTime1 = Calendar.getInstance();
		Calendar valueTime2 = Calendar.getInstance();
		
		//使用Collections工具类进行排序
		Collections.sort(fileList, new Comparator<Map.Entry<String, String>>() {


			@Override
			public int compare(Entry<String, String> o1, Entry<String, String> o2) {
				int i = o1.getValue().compareTo(o2.getValue());
				return -i;
			}
		});
		
		int size = fileList.size();
		for(int z = 0; z < size; z++) {
			fileLists.add(fileList.get(z).getKey() + " " + fileList.get(z).getValue());
		}
		
		return fileLists;
	}
}

其中有三个方法,第一个方法是遍历所有的文件,第二个方法是找出修改时间在七天以内的文件,第三个方法是将七天以内的文件使用冒泡排序,按照修改时间从新到旧的顺序将其存入集合中,再以此遍历出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值