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

来源:互联网 发布:淘宝服装店铺名称 编辑:程序博客网 时间:2024/06/10 22:45

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

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>>() {@Overridepublic 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
原创粉丝点击