Java中文件处理问题

事情起因是因为这句话:

复制代码
String md = DigestUtils.md5Hex(Files.newInputStream(Paths.get(filePath)));

这句话虽然返回了正确的md值,但是会锁住后续的文件操作。所以应该自己封装一个安全的函数使用try包裹住才好。

比方说改成这样:

java 复制代码
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class FileMD5Calculator {

    public static String calculateMD5(String filePath) {
        try (RandomAccessFile file = new RandomAccessFile(filePath, "r");
             FileChannel channel = file.getChannel()) {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            ByteBuffer buffer = ByteBuffer.allocate(8192); // 分配 8KB 的缓冲区
            int bytesRead = 0;
            while ((bytesRead = channel.read(buffer)) != -1) {
                buffer.flip(); // 切换至读模式
                digest.update(buffer);
                buffer.clear(); // 清空缓冲区,为下一次读取做准备
            }
            byte[] hash = digest.digest();
            return bytesToHex(hash);
        } catch (IOException | NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String bytesToHex(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            result.append(String.format("%02x", b));
        }
        return result.toString();
    }

    public static void main(String[] args) {
        String filePath = "your_file_path_here";
        String md5 = calculateMD5(filePath);
        System.out.println("MD5: " + md5);
    }
}

虽然是个小问题吧。

文件处理时的经验提升!

相关推荐
程序员侠客行4 分钟前
Mybatis入门到精通 一
java·架构·mybatis
糕......5 分钟前
Java异常处理完全指南:从概念到自定义异常
java·开发语言·网络·学习
御水流红叶5 分钟前
第七届金盾杯(第一次比赛)wp
开发语言·python
Lhan.zzZ5 分钟前
Qt跨线程网络通信:QSocketNotifier警告及解决
开发语言·c++·qt
小徐Chao努力5 分钟前
【Langchain4j-Java AI开发】04-AI 服务核心模式
java·人工智能·python
superman超哥6 分钟前
仓颉性能优化秘籍:内联函数的优化策略与深度实践
开发语言·后端·性能优化·内联函数·仓颉编程语言·仓颉·仓颉语言
Wang's Blog8 分钟前
Lua: 元表机制实现运算符重载与自定义数据类型
开发语言·lua
我找到地球的支点啦9 分钟前
Matlab系列(006) 一利用matlab保存txt文件和读取txt文件
开发语言·算法·matlab
-森屿安年-14 分钟前
STL中 Map 和 Set 的模拟实现
开发语言·c++
阿蒙Amon14 分钟前
C#每日面试题-接口和抽象类的区别
开发语言·c#