遍历磁盘中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
- 遍历磁盘中7天内修改过的文件,按照从新到旧打印
- 在某一磁盘目录下将.txt的所有文件遍历打印到控制台上
- pycharm 如何不提交修改过的文件到git
- 新文件按照旧文件结构覆盖旧文件
- 按照文件修改时间遍历文件夹,进行文本连接
- eclipse中项目名称修改后部署到tomcat中应用名称仍然是旧的
- eclipse中项目名称修改后部署到tomcat中应用名称仍然是旧的
- eclipse中项目名称修改后部署到tomcat中应用名称仍然是旧的
- eclipse中项目名称修改后部署到tomcat中应用名称仍然是旧的
- 请问如何按照表中存储的图片的路径及文件名将图片打印出来?
- 找出svn log中修改过的文件
- 彻底实现BLOB字段保存到磁盘文件的方法,内有实例
- 从1到n的平方,按照从小到大,顺时针打印
- FileInputStream读取磁盘内的文件
- 校招编程题(四) 二叉树之根据前序和中序遍历求按照深度优先遍历打印的序列
- eclipse中项目名称修改后部署到tomcat中应用名称仍然是旧的问题解决
- CENTOS 修改MYSQL文件到内存盘
- 按照层次遍历并打印二叉树
- Struts2 基础
- Linux下tomcat端口映射为80
- 二维数组---矩阵转置
- primary key与unique的区别 及 insert方法的一些说明注意
- Log4J写入到SQL SERVER数据库中, 单引号错误解决办法
- 遍历磁盘中7天内修改过的文件,按照从新到旧打印
- OpenCV3.1实现matlab中strel('disk', n)函数
- ReactiveX(rxjava)学习笔记
- 如何正确获得Android内外SD卡路径
- 深入理解JAVA国际化
- web项目框架搭建
- 设计模式之单例模式(Singleton)
- Mediaproxy 与 Rtpproxy
- 数据业务建立流程之发起网络连接过程