中文JAVA技术平等自由协作创造

Java专题文章博客和开源

常用链接

统计

最新评论

Java如何判断一个文件(夹)被重命名过?

  使用File的lastModify方法是不行的,又不想使用md5码来校验,不使用md5来判断是因为md5算法运算大文件时耗时间。况且内容不改变,只改变文件名。
 
   后来使用lastModify+文件的绝对路径来作为依据判断,我做了2个Map来映射,新map和旧map不匹配则会产生新增和删除这2个结果。
 
   这样用来判断文件还是可以的 但是文件夹就不行了。如果文件夹下面还有文件(夹),也会被误认为重命名。
 
   有什么其他解决办法吗?或者代码应该如何修改更加好?
 
   代码如下:
 
   public class Main {
 
   public Map<STRING,LONG> map = new HashMap<STRING, long="">();
 
   public String baseFilePath;
 
   public static void main(String[] args) throws IOException, InterruptedException {
 
   String baseFilePath = "D:\\md5";
 
   Main m = new Main(baseFilePath);
 
   Map<STRING, long=""> oldMap = m.getFileInfo(baseFilePath);
 
   //很长时间过去了
 
   //-------------------各种操作:文件(夹)或修改或删除或新增----------------
 
   File oldFile = new File(baseFilePath+"\\ddd.txt");//删除
 
   oldFile.delete();
 
   File newFile = new File(baseFilePath+"\\new.txt");//新增
 
   newFile.createNewFile();
 
   File olddir = new File(baseFilePath+"\\test");//重命名
 
   File newdir = new File(baseFilePath+"\\test2");
 
   olddir.renameTo(newdir);
 
   //-------------------操作结束---------------------------------------
 
   Main m2 = new Main(baseFilePath);
 
   Map<STRING, long=""> newMap = m2.getFileInfo(baseFilePath);
 
   Map<STRING, string=""> resultMap = m.getModifyInfo(oldMap, newMap);
 
   List<STRING> resultKeys = new ArrayList<STRING>(resultMap.keySet());
 
   for(String resultKey:resultKeys){
 
   String resultValue = resultMap.get(resultKey);
 
   System.out.println(resultKey+"---"+resultValue);
 
   }
 
   }
 
   public Main(String baseFilePath){
 
   this.baseFilePath = baseFilePath;
 
   }
 
   /**
 
   * 循环得到目录下的名字和modify时间
 
   * @param baseFile 根目录
 
   * @return Map<STRING, long=""> 相对baseFilePath的路径 以及 最后修改时间
 
   */
 
   public Map<STRING, long=""> getFileInfo(String baseFile){
 
   FileOperate fo = new FileOperate();
 
   File[] files = fo.getFileList(baseFile);
 
   for(File file:files){
 
   map.put(file.getAbsolutePath()。substring(baseFilePath.length()), file.lastModified());//相对baseFilePath的路径 以及 最后修改时间
 
   if(file.isDirectory()){
 
   getFileInfo(file.getAbsolutePath());//递归
 
   }
 
   }
 
   return map;
 
   }
 
   /**
 
   * 比较目录信息(返回变动的目录信息)
 
   * @param oldMap
 
   * @param newMap
 
   * @return 存放键值对:键是目录 值是类型(如文件内容修改,文件(夹)删除,文件(夹)添加) 注:文件(夹)重命名属于删除、添加
 
   */
 
   public Map<STRING, string=""> getModifyInfo(Map<STRING, long=""> oldMap,Map<STRING, long=""> newMap){
 
   Map<STRING, string=""> resultMap = new HashMap<STRING, string="">();
 
   List<STRING> oldKeysList = new ArrayList<STRING>(oldMap.keySet());
 
   List<STRING> newKeysList = new ArrayList<STRING>(newMap.keySet());
 
   for(String oldKey:oldKeysList){
 
   long oldValue = oldMap.get(oldKey);
 
   if(newKeysList.contains(oldKey)){//包含此文件(夹)
 
   long newValue = newMap.get(oldKey);
 
   if(oldValue==newValue){//文件(夹)没修改
 
   //continue;
 
   }else{//文件被修改
 
   resultMap.put(oldKey, "修改");
 
   }
 
   }else{//不包含 删除
 
   resultMap.put(oldKey, "删除");
 
   }
 
   }
 
   for(String newKey:newKeysList){
 
   if(oldKeysList.contains(newKey)){
 
   //continue;
 
   }else{//新增
 
   resultMap.put(newKey, "新增");
 
   }
 
   }
 
   return resultMap;
 
   }
 
   }
 
 </STRING></STRING></STRING></STRING></STRING,></STRING,></STRING,></STRING,></STRING,>
 
   </STRING,></STRING,></STRING></STRING></STRING,></STRING,></STRING,></STRING,>
 
   </STRING,LONG> www.lefeng123.com  托福答案
 

posted on 2014-02-12 18:12 好不容易 阅读(207) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
PK10开奖 PK10开奖