您的位置:首页 > 其它

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

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

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


其中有三个方法,第一个方法是遍历所有的文件,第二个方法是找出修改时间在七天以内的文件,第三个方法是将七天以内的文件使用冒泡排序,按照修改时间从新到旧的顺序将其存入集合中,再以此遍历出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息