Java生成文件的md5文件方法的代碼

package pri.liyang.util;

import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 根據文件生成MD5碼的工具類
 * Author:李小白
 */
public class MD5Util {

    /**
     * 輔助方法
     * @param filename
     * @return
     */
    private static byte[] createChecksum(String filename) {
        InputStream fis = null;
        try {
            fis = new FileInputStream(filename);
            byte[] buffer = new byte[1024];
            MessageDigest complete = MessageDigest.getInstance("MD5");
            int numRead = -1;

            while ((numRead = fis.read(buffer)) != -1) {
                complete.update(buffer, 0, numRead);
            }
            return complete.digest();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fis) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;

    }

    /**
     * 生成文件的MD5碼
     * @param filePath 文件路徑
     * @return 該文件的MD5碼
     */
    private static String generateMD5(String filePath){
        if (!new File(filePath).isFile()) {
            System.err.println("Error: " + filePath
                    + " is not a valid file.");
            return null;
        }
        byte[] b = createChecksum(filePath);
        if(null == b){
            System.err.println(("Error:create md5 string failure!"));
            return null;
        }
        StringBuilder result = new StringBuilder();

        for (int i = 0; i < b.length; i++) {
            result.append(Integer.toString((b[i] & 0xff) + 0x100, 16)
                    .substring(1));
        }
        return result.toString();
    }

    /**
     * 根據文件,在同一文件夾下生成相應的MD5文件,文件名相同,僅後綴名不同
     * 比如文件爲helloworld.txt,生成MD5文件:helloworld.md5
     * @param filePath 文件絕對路徑
     */
    public static void generateMD5File(String filePath) throws IOException {
        //獲得該文件實例
        File file = new File(filePath);

        //獲得該文件的MD5碼
        String md5code = generateMD5(filePath);

        //獲得該文件的文件夾路徑
        String directoryPath = file.getParentFile().getAbsolutePath();

        //生成該文件對應的MD5文件的文件名
        String md5FileName = file.getName().substring(0, file.getName().lastIndexOf(".")) + ".md5";

        //獲得該文件對應的MD5文件的絕對路徑
        String md5FilePath = directoryPath + File.separator + md5FileName;

        //生成MD5文件
        File md5File = new File(md5FilePath);
        if(!md5File.exists()){
            md5File.createNewFile();
        }

        //文件寫入MD5碼的FileWriter類
        FileWriter fileWriter = new FileWriter(md5File);
        //將MD5碼寫入到MD5文件中
        fileWriter.write(md5code);
        //刷新流
        fileWriter.flush();
        //關流
        fileWriter.close();

        //打印提示信息
        System.out.println("創建MD5文件成功:" + md5FilePath);
    }


    /**
     * 輸入文件夾名稱,將該文件夾下所有的文件都生成同名的MD5文件
     * @param directoryPath
     */
    public static void generateMD5Files(String directoryPath) throws IOException {
        //創建文件夾實例
        File directory = new File(directoryPath);
        //文件數組
        File[] files = null;

        if(directory.isDirectory()){
            //獲得所有文件
            files = directory.listFiles();
            //分別爲每一個文件創建MD5文件
            for(int i=0; i<files.length; i++){
                generateMD5File(files[i].getAbsolutePath());
            }
        }else{
            System.err.println("不是文件夾,請檢查路徑!");
            return;
        }

    }


    /**
     * 測試類
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        //輸入文件的絕對路徑,生成該文件同一文件夾下的相同文件名,後綴名爲.md5的文件
        generateMD5File("C:\\Users\\李小白\\Desktop\\MD5\\helloworld.txt");

        //輸入文件夾的絕對路徑,生成該文件夾下所有文件的MD5文件,該文件夾的文件數多一倍
        generateMD5Files("C:\\Users\\李小白\\Desktop\\MD5");
    }

}
本文鏈接:https://blog.csdn.net/weixin_39448458/article/details/81485522

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章