JAVA 读取文件进行排序取出最后变更的的文件

读取文件夹进行遍历得到最新的修改时间进行排序。


package com.util;

import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class IoUtil {
	
	/** 
	  * 创建文件 
	  * @param fileName 
	  * @return 
	  */  
	 public static File createFile(String filePathName)throws Exception{  
	    File file  = new File(filePathName);
	   if(!file.exists()){
		   file.createNewFile();  
	   }else{
		   file.delete();
		   file.createNewFile();
	   }
	   return file;  
	 }
	 
	 /**
	  * 写入文件
	  * 自定义编码
	  */
	 public static boolean writeTxtFile(String content,String filePathName,String bytes)throws Exception{  
		  boolean flag=false;  
		  FileOutputStream o=null;  
		  try {  
			  String path="";
			  if(filePathName.indexOf("/")>-1){
				  path=filePathName.substring(0,filePathName.lastIndexOf("/"));
			  }else if(filePathName.indexOf("\\")>-1){
				  path=filePathName.substring(0,filePathName.lastIndexOf("\\"));
			  }
			  createDir(path);
		      o = new FileOutputStream(createFile(filePathName));
		      o.write(content.getBytes(bytes!=null&&!bytes.equals("")?bytes:"UTF-8"));  
		      o.close();  
		   flag=true;  
		  } catch (Exception e) {  
		   // TODO: handle exception  
		   e.printStackTrace();  
		  }  
		  return flag;  
	  }  
	 
	 
	 /**
	  * 写入文件
	  * 默认编码UTF-8
	  */
	 public static boolean writeTxtFile(String content,String filePathName)throws Exception{  
		  boolean flag=false;  
		  FileOutputStream o=null;  
		  try {  
			  String path="";
			  if(filePathName.indexOf("/")>-1){
				  path=filePathName.substring(0,filePathName.lastIndexOf("/"));
			  }else if(filePathName.indexOf("\\")>-1){
				  path=filePathName.substring(0,filePathName.lastIndexOf("\\"));
			  }
			  createDir(path);
		      o = new FileOutputStream(createFile(filePathName));
		      o.write(content.getBytes("UTF-8"));  
		      o.close();  
		   flag=true;  
		  } catch (Exception e) {  
		   // TODO: handle exception  
		   e.printStackTrace();  
		  }  
		  return flag;  
	  }  
	 
	 
	 
	 /**
	  * @param destDirName
	  * @return
	  */
	 public static boolean createDir(String destDirName) {
	        File dir = new File(destDirName);
	        if (dir.exists()) {
	            return false;
	        }
	        if (!destDirName.endsWith(File.separator)) {
	            destDirName = destDirName + File.separator;
	        }
	        //创建目录
	        if (dir.mkdirs()) {
	            return true;
	        } else {
	            return false;
	        }
	 }
	 

	 
	 
	 /**
	  * TEST
	  * @param args
	  */
	 public static void main(String[] args) {
		 //Map<String,Object> map = new   LinkedHashMap<String,Object>();
		 //map=mlistFiles(getPath()+"/test");
		 //System.out.println("===>"+getPath());

	}
	 
	/**
	 * 取得静态文件生成路径
	 * 
	 * @return
	 */
	public static String getPath() {
		String path = IoUtil.class.getResource("").getPath();
		path = path.substring(0, path.indexOf("WEB-INF"));
		return path;
	}
	 
	 /**
	  * 找出变更的文件
	  * @param path
	  * @return
	  */
	 public static Map<String,Object> mlistFiles(String path){
		 
		 File file_path=new File(path);
			//列出该目录下所有文件和文件夹
			File[] files = file_path.listFiles();
			//按照文件最后修改日期倒序排序
			Map<String,Object> map = new LinkedHashMap<String,Object>();
			//取出第一个(即最新修改的)文件,打印文件名
			if(files!=null){
				for(int i=0;i<files.length;i++){
					if(!files[i].isHidden()&&files[i].isFile()&&!files[i].getName().equals("sitemap.xml")){
						String value=files[i].getName();
						String key=String.valueOf(files[i].lastModified());
						key=getMilliseconds(key,i);
						//System.out.println("======key=====>"+key);
						map.put(key,value);
					}
				
				}
			}
		return	 orderFile(map.size(),map);
	 }
	 
	 /**
	  * 解决linux读取毫秒数为000的情况
	  * @param val
	  * @param i
	  * @return
	  */
	 public static String getMilliseconds(String val,int i){
		 //截取后三位是否为000
		 String returnStr="";
		 String lastStr=val.substring(val.length()-3,val.length());
		 if(lastStr.equals("000")){
			 String fisrtStr = val.substring(0,val.length()-3);
			 String lastNum="001";
			 if(i<10){
				 lastNum="00"+String.valueOf(i);
			 }else if(i<100){
				 lastNum="0"+String.valueOf(i);
			 }else{
				 lastNum=i<1000?String.valueOf(i):lastNum;
			 }
			 returnStr=fisrtStr+lastNum;
		 }else{
			 returnStr=val;
		 }
		 return returnStr;
	 }
	 
	 /**
	  * 文件排序
	  * @param x
	  * @param map
	  * @return
	  */
	 public static Map<String,Object> orderFile(int x,Map<String,Object> map){
		 Map<String,Object> new_map = new LinkedHashMap<String,Object>();
		    Long[] arr = new Long[x];
		    int i=0;
		    Iterator<String> ite = map.keySet().iterator(); 
		    while(ite.hasNext()){
		    	String key  = ite.next();  
		    	arr[i] = Long.parseLong(key);
		        i++;
		    }
		    Arrays.sort(arr);
		    for(int k=arr.length-1;k>=0;k--){
		    	//System.out.println("==>"+arr[k]+"-->"+dateTimeToStr(arr[k])+">>>"+map.get(""+arr[k]));
		    	new_map.put(String.valueOf(arr[k]), map.get(""+arr[k]));
		    }
		    
		    return new_map;
	 }
	 
	 /**
	  * 将长整型数字转换为日期格式的字符串
	  * @param time
	  * @param format
	  * @return
	  */
	 public static String dateTimeToStr(long time) {
	   SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	   Date date = new Date(time);
	   return sf.format(date);
	 }

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值