若要把读取到的 files
列表里的内容转换为 MD5 哈希值,你可以逐个遍历 files
列表中的元素,将每个元素的内容计算成 MD5 哈希值。
以下是一个完整的 Java 示例代码,展示了如何实现这一功能:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
class CheckHelper {
public static String getOcetString(byte[] buffer, int bytesRead) {
return new String(buffer, 0, bytesRead);
}
}
public class FilesToMD5 {
public static String calculateMD5(String input) {
try {
// 获取 MD5 消息摘要实例
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算输入字符串的 MD5 哈希值
byte[] digest = md.digest(input.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : digest) {
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
// 若 MD5 算法不可用,抛出运行时异常
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
String path = "path/to/your/file.txt";
int blockSize = 1024;
long fileLength = 0;
List<String> files = new ArrayList<>();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path))) {
byte[] buffer = new byte[blockSize];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
fileLength += bytesRead;
files.add(CheckHelper.getOcetString(buffer, bytesRead));
}
} catch (IOException e) {
e.printStackTrace();
}
// 遍历 files 列表,计算每个元素的 MD5 哈希值
for (String content : files) {
String md5 = calculateMD5(content);
System.out.println("内容: " + content);
System.out.println("MD5 哈希值: " + md5);
}
}
}
代码解释
calculateMD5
方法:
- 借助
MessageDigest.getInstance("MD5")
获取 MD5 消息摘要实例。 - 利用
md.digest(input.getBytes())
计算输入字符串的 MD5 哈希值。 - 把计算得到的字节数组转换为十六进制字符串。
main
方法:
- 读取文件内容到
files
列表。 - 遍历
files
列表,对每个元素调用calculateMD5
方法计算 MD5 哈希值,并将结果打印输出。
注意事项
- 要把
"path/to/your/file.txt"
替换成实际的文件路径。 - 此代码是对
files
列表里的每个元素分别计算 MD5 哈希值。若你要计算整个文件内容的 MD5 哈希值,需把所有元素合并后再计算。