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

          Java專題文章博客和開源

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          Java如何判斷一個(gè)文件(夾)被重命名過?

            使用File的lastModify方法是不行的,又不想使用md5碼來校驗(yàn),不使用md5來判斷是因?yàn)閙d5算法運(yùn)算大文件時(shí)耗時(shí)間。況且內(nèi)容不改變,只改變文件名。
           
             后來使用lastModify+文件的絕對(duì)路徑來作為依據(jù)判斷,我做了2個(gè)Map來映射,新map和舊map不匹配則會(huì)產(chǎn)生新增和刪除這2個(gè)結(jié)果。
           
             這樣用來判斷文件還是可以的 但是文件夾就不行了。如果文件夾下面還有文件(夾),也會(huì)被誤認(rèn)為重命名。
           
             有什么其他解決辦法嗎?或者代碼應(yīng)該如何修改更加好?
           
             代碼如下:
           
             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);
           
             //很長(zhǎng)時(shí)間過去了
           
             //-------------------各種操作:文件(夾)或修改或刪除或新增----------------
           
             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);
           
             //-------------------操作結(jié)束---------------------------------------
           
             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時(shí)間
           
             * @param baseFile 根目錄
           
             * @return Map<STRING, long=""> 相對(duì)baseFilePath的路徑 以及 最后修改時(shí)間
           
             */
           
             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());//相對(duì)baseFilePath的路徑 以及 最后修改時(shí)間
           
             if(file.isDirectory()){
           
             getFileInfo(file.getAbsolutePath());//遞歸
           
             }
           
             }
           
             return map;
           
             }
           
             /**
           
             * 比較目錄信息(返回變動(dòng)的目錄信息)
           
             * @param oldMap
           
             * @param newMap
           
             * @return 存放鍵值對(duì):鍵是目錄 值是類型(如文件內(nèi)容修改,文件(夾)刪除,文件(夾)添加) 注:文件(夾)重命名屬于刪除、添加
           
             */
           
             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) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          PK10開獎(jiǎng) PK10開獎(jiǎng)
          主站蜘蛛池模板: 略阳县| 长海县| 霍林郭勒市| 郁南县| 汾西县| 四会市| 德惠市| 高台县| 衡水市| 鄂托克旗| 于都县| 婺源县| 济南市| 龙口市| 七台河市| 遂川县| 通化县| 扬州市| 巴马| 台北市| 津市市| 万载县| 河间市| 建水县| 宁德市| 扎兰屯市| 临泽县| 宣恩县| 安泽县| 余干县| 香格里拉县| 乐昌市| 平利县| 镇江市| 肥城市| 中江县| 荔波县| 建昌县| 肇东市| 镇赉县| 溧阳市|