
import java.io.File; |
import java.io.FileInputStream; |
import java.io.IOException; |
import java.nio.MappedByteBuffer; |
import java.nio.channels.FileChannel; |
import java.security.MessageDigest; |
import java.security.NoSuchAlgorithmException; |
/** |
* 获取文件md5值 |
* |
*/ |
public class FileMd5Utils { |
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(); |
} |
} |
/** |
* 根据文件路径计算文件的MD5 |
* |
* @param fileName |
* @return |
* @throws IOException |
*/ |
public static String getFileMD5String(String fileName) throws IOException { |
File f = new File(fileName); |
return getFileMD5String(f); |
} |
/** |
* 根据文件对象计算文件的MD5 |
* |
* @param file |
* @return |
* @throws IOException |
*/ |
public static String getFileMD5String(File file) throws IOException { |
FileInputStream in = new FileInputStream(file); |
FileChannel ch = in.getChannel(); |
MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, |
file.length()); |
messageDigest.update(byteBuffer); |
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]; |
char c1 = hexDigits[bt & 0xf]; |
stringbuffer.append(c0); |
stringbuffer.append(c1); |
} |
/** |
* 测试方法 |
* |
* @param args |
* @throws IOException |
*/ |
public static void main(String[] args) throws IOException { |
String fileName = "C:\\test.txt"; // 更改文件名不会导致文件md5值变化 |
System.out.println(getFileMD5String(fileName)); |
} |
} |



