国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

通過MD5排除重復文件

2019-11-14 20:54:38
字體:
來源:轉載
供稿:網友
通過md5排除重復文件

今天下載了好多美女圖片壁紙,可是看了一下發現好多圖片重復了,有強迫癥的我必須把重復的都給剔除掉,首先想到的當然是百度了,問問度娘有沒有什么圖片去重的工具,搜了一下還真有。奈何本人智商捉急用不來這高級的軟件,無奈之下只好準備一張一張的挑出來了,CTRL+A一看2000+的圖片,好吧一晚上不用干別的事了。。

辛虧腦袋還比較好使,既然作為一個程序員,為什么不能寫個代碼處理一下呢?想到點子說干咱就干,最重要的問題就是怎么判斷圖片是不是重復的呢?通過文件名?還是比較大小?好像都不怎么靠譜啊。。突然又是靈光一閃,每個文件不都是有個DNA信息嘛,相同的文件MD5值肯定是一樣的嘛。

廢話說了這么多,下面說正經的了,首先要怎么獲得文件的MD5值呢?這回度娘倒沒讓我失望了,直接上代碼:

String p = "E://123.jpg";FileInputStream fis = new FileInputStream(p);String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));IOUtils.closeQuietly(fis);System.out.PRintln("md5: "+md5);

得到所有文件的md5之后進行比較,相同的md5就是重復的文件了。md5已經得到了剩下的就很簡單了,通過File取到所有的文件,然后再獲取文件的MD5,再寫個雙重for循環排除掉相同的md5,寫完收工搞定。運行起來就等結果了,這一等就是兩個小時。。好在結果倒是挺不錯。但是這個時間有點讓人接受不了啊,這個代碼還是有問題啊,得優化。又一想,集合去重復這不可以用Set嘛,趕緊把代碼稍作改造,分分鐘搞定。。差距也恁大了,看來這java基礎還是不夠牢固啊。又要從頭看一遍書了。。附上最終代碼:

String path = "E://123";File dir = new File(path);String[] files = dir.list();Map<String,String> map=new HashMap<String,String>();for (int i = 0; i < files.length; i++){    String p = path + "//" + files[i];    FileInputStream fis = new FileInputStream(p);    String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));    IOUtils.closeQuietly(fis);    map.put(md5,files[i]);}Iterator<String> it = map.keySet().iterator();while (it.hasNext()){    String md5=it.next();    String filename=map.get(md5);    System.out.println("不重復的文件:"+filename);}

各位看官們要是有什么更好的方法可以給我提出來啊。最后還是不管遇到什么問題還是要先仔細的分析研究一下,不要急著動手敲代碼,思路清晰了敲出來的代碼才會更有效。

明天再準備做一個簡單的客戶端程序,這樣以后就不用每次來運行代碼了。回頭會把源代碼附上。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三门县| 蒲城县| 鄂托克前旗| 集贤县| 富顺县| 大余县| 盖州市| 武夷山市| 温泉县| 武宁县| 中牟县| 柳州市| 高邮市| 永宁县| 皮山县| 灵寿县| 色达县| 博爱县| 巴彦县| 彰化市| 安丘市| 子长县| 古交市| 文昌市| 民乐县| 德清县| 巴塘县| 平昌县| 余庆县| 克拉玛依市| 庐江县| 合肥市| 黄龙县| 九江县| 北辰区| 姚安县| 灵石县| 清河县| 建阳市| 石狮市| 邓州市|