中文JAVA技術平等自由協(xié)作創(chuàng)造

          Java專題文章博客和開源

          常用鏈接

          統(tǒng)計

          最新評論

          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;
           
             }
           
             /**
           
             * 循環(huán)得到目錄下的名字和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 好不容易 閱讀(216) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          PK10開獎 PK10開獎
          主站蜘蛛池模板: 江津市| 横峰县| 苗栗县| 兴宁市| 天水市| 木兰县| 班戈县| 吕梁市| 泰兴市| 盘山县| 万年县| 南陵县| 扎鲁特旗| 桓台县| 大洼县| 韩城市| 桃江县| 香河县| 铅山县| 两当县| 利辛县| 江口县| 长兴县| 育儿| 保康县| 咸阳市| 合作市| 万载县| 普格县| 余庆县| 高尔夫| 阜宁县| 泸溪县| 彭州市| 石棉县| 石嘴山市| 平谷区| 金塔县| 西乌| 射洪县| 禹城市|