android 刪除重復(fù)文件

1.問(wèn)題:整理之前手機(jī)照片愕提,文件發(fā)現(xiàn)有很多重復(fù)的文件馒稍,而且目錄比較雜亂,分布零散浅侨,就想寫(xiě)一個(gè)工具程序纽谒,刪除重復(fù)文件,寫(xiě)完后封裝成一個(gè)工具類(lèi)得了如输。
2.思路:無(wú)法根據(jù)文件名判斷文件是否重復(fù)鼓黔,故使用MD5校驗(yàn); 遇到有文件夾的不见,列出下面文件澳化,判斷文件還是文件夾,涉及遞歸稳吮。
刪除重復(fù)文件代碼:

/**
 * Created by dong on 2017/1/10.
 * 刪除重復(fù)文件   調(diào)用時(shí)缎谷,傳入目標(biāo)路徑即可
 */

public class DeleteSameFile {
    static List<String> md5List=new ArrayList<>();
    static int num = 0;
    public static void delFile(String path) throws IOException {
        File f = new File(path);
        if(f.isFile()){                           //如果是一個(gè)文件,則繼續(xù)
            isFileAndDeleteFile(f);

        }else if(f.isDirectory()){                     //如果是一個(gè)目錄灶似,則拿到它的子文件列表
            File[] flist = f.listFiles();
            for(File file :flist){
                if(file.isFile()){    //列表項(xiàng)為File列林,則繼續(xù),同上
                    isFileAndDeleteFile(file);

                }else if(file.isDirectory()){     //列表項(xiàng)為文件夾酪惭,遞歸調(diào)用自身
                    delFile(file.getPath());
                }
            }
        }
    }
    private static void isFileAndDeleteFile(File file) throws IOException {
        String md5 = MD5Util.getFileMD5String(file).toString();            //取得該文件的MD5值
        if (md5List.size() > 0) {                         //如果存放md5值的數(shù)組不為空
            for (String s : md5List) {
                if (md5.equals(s)) {                    //如果數(shù)組中有了和該文件md5z值相同的項(xiàng)希痴,表明該文件已經(jīng)存在,刪除該文件
                    file.delete();
                    num++;
                    Log.i("size", "文件:" + file.getName() + "和已有文件重復(fù),已被刪除");
                }
            }
            if (file.exists()) {                       //判斷該文件是否存在春感,如果該文件沒(méi)有被刪除润梯,說(shuō)明沒(méi)有和該文件相同的文件,則把其md5值存入數(shù)組之中
                md5List.add(md5);
            }
        }
    }


}

MD5校驗(yàn)工具:

public class MD5Util {

    /**
     * 默認(rèn)的密碼字符串組合,用來(lái)將字節(jié)轉(zhuǎn)換成 16 進(jìn)制表示的字符,apache校驗(yàn)下載的文件的正確性用的就是默認(rèn)的這個(gè)組合 
     */
    protected static char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    protected static MessageDigest messagedigest = null;
    static {
        try {
            messagedigest = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    public static String getFileMD5String(File file) throws IOException {
        InputStream fis;
        fis = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int numRead = 0;
        while ((numRead = fis.read(buffer)) > 0) {
            messagedigest.update(buffer, 0, numRead);
        }
        fis.close();
        return bufferToHex(messagedigest.digest());
    }

    private static String bufferToHex(byte bytes[]) {
        return bufferToHex(bytes, 0, bytes.length);
    }

    private static String bufferToHex(byte bytes[], int m, int n) {
        StringBuffer stringbuffer = new StringBuffer(2 * n);
        int k = m + n;
        for (int l = m; l < k; l++) {
            appendHexPair(bytes[l], stringbuffer);
        }
        return stringbuffer.toString();
    }

    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
        char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字節(jié)中高 4 位的數(shù)字轉(zhuǎn)換  
        // 為邏輯右移纺铭,將符號(hào)位一起右移,此處未發(fā)現(xiàn)兩種符號(hào)有何不同  
        char c1 = hexDigits[bt & 0xf];// 取字節(jié)中低 4 位的數(shù)字轉(zhuǎn)換  
        stringbuffer.append(c0);
        stringbuffer.append(c1);
    }
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寇钉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舶赔,更是在濱河造成了極大的恐慌扫倡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竟纳,死亡現(xiàn)場(chǎng)離奇詭異撵溃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)锥累,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)缘挑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人桶略,你說(shuō)我怎么就攤上這事语淘。” “怎么了际歼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵惶翻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹅心,道長(zhǎng)吕粗,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任旭愧,我火速辦了婚禮颅筋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘输枯。我一直安慰自己垃沦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布用押。 她就那樣靜靜地躺著肢簿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜻拨。 梳的紋絲不亂的頭發(fā)上池充,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音缎讼,去河邊找鬼收夸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛血崭,可吹牛的內(nèi)容都是我干的卧惜。 我是一名探鬼主播厘灼,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼咽瓷!你這毒婦竟也來(lái)了设凹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茅姜,失蹤者是張志新(化名)和其女友劉穎闪朱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钻洒,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奋姿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了素标。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片称诗。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖头遭,靈堂內(nèi)的尸體忽然破棺而出寓免,到底是詐尸還是另有隱情,我是刑警寧澤任岸,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布再榄,位于F島的核電站狡刘,受9級(jí)特大地震影響享潜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗅蔬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一剑按、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澜术,春花似錦艺蝴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至盒延,卻和暖如春缩擂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背添寺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工胯盯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人计露。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓博脑,卻偏偏與公主長(zhǎng)得像憎乙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叉趣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,515評(píng)論 25 707
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,135評(píng)論 2 34
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言乡数,發(fā)作 oo-boon-too 的音椭蹄。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 99,157評(píng)論 9 467
  • 父親 寫(xiě)下父親兩字,就涕淚滂沱净赴,不能自己绳矩。十一年來(lái),和父親相關(guān)的字眼玖翅、音樂(lè)翼馆、影視劇等,我都不敢看不敢聽(tīng)金度。每年的父親...
    jiangnan2025閱讀 235評(píng)論 6 6
  • 在今年九月份的第二個(gè)星期,我們分手了跟伏。還差兩個(gè)星期我們就在一起半年了? 剛分手的時(shí)候你還會(huì)拼命的挽回丢胚,或許...
    魚(yú)呀閱讀 332評(píng)論 0 0