遍历磁盘中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; } }
其中有三个方法,第一个方法是遍历所有的文件,第二个方法是找出修改时间在七天以内的文件,第三个方法是将七天以内的文件使用冒泡排序,按照修改时间从新到旧的顺序将其存入集合中,再以此遍历出来。
相关文章推荐
- 在某一磁盘目录下将.txt的所有文件遍历打印到控制台上
- 在某一磁盘目录下将.txt的所有文件遍历打印到控制台上
- 按照文件修改时间遍历文件夹,进行文本连接
- Java 遍历文件夹获得全部文件(或者按照扩展名打印)
- Java 遍历文件夹获得全部文件(或者按照扩展名打印)
- 关于os模块中的文件夹遍历,文件操作,文件的创建和修改时间的用法
- U盘的文件内容如何按照修改时间排列?
- C#遍历磁盘感染aspx文件
- Java 中按文件名称分类,按文件大小分类,按照文件类型分类,按照最后修改时间分类的工具类
- python 遍历所有文件,修改文件内的内容
- VC++6.0遍历文件夹及子目录并打印文件大小属性
- 遍历文件夹下得所有文件并打印
- shell 脚本实现的遍历目录修改子目录及其文件权限
- 递归遍历磁盘下的某一文件夹中所有文件,并copy文件生成文件和带文件夹的文件
- Cmd遍历当前目录 并简单 修改当前目录的文件扩展名的方法
- c# 通过修改图片对象的文件的字节 变相"加密""解密"图片在磁盘的存储
- 遍历某个磁盘的所有文件
- java实现按照文件的修改时间排序文件夹下的文件
- 【转载】通过修改图片对象的文件的字节 变相\"加密\"\"解密\"图片在磁盘的存储
- [WinAPI] API 13 [遍历指定目录 打印文件和其他属性]