中文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 好不容易 閱讀(211) 評論(0)  編輯  收藏


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


          網站導航:
           
          PK10開獎 PK10開獎
          主站蜘蛛池模板: 澄江县| 昌图县| 河池市| 西昌市| 万盛区| 宁国市| 石渠县| 瓦房店市| 汝城县| 沁源县| 屏南县| 天全县| 平塘县| 壤塘县| 安乡县| 大洼县| 栾城县| 环江| 印江| 竹山县| 宜昌市| 沁源县| 元谋县| 泗阳县| 刚察县| 卢氏县| 阿拉善右旗| 清流县| 新龙县| 白山市| 晋宁县| 读书| 登封市| 宁陕县| 诸暨市| 台山市| 凤山市| 武邑县| 治县。| 青川县| 临潭县|