对比新文件 |
| | |
| | | package com.iailab.framework.common.util.io; |
| | | |
| | | import cn.hutool.core.io.FileTypeUtil; |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.core.io.file.FileNameUtil; |
| | | import cn.hutool.core.util.IdUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.crypto.digest.DigestUtil; |
| | | import lombok.SneakyThrows; |
| | | |
| | | import java.io.ByteArrayInputStream; |
| | | import java.io.File; |
| | | |
| | | /** |
| | | * 文件工具类 |
| | | * |
| | | * @author iailab |
| | | */ |
| | | public class FileUtils { |
| | | |
| | | /** |
| | | * 创建临时文件 |
| | | * 该文件会在 JVM 退出时,进行删除 |
| | | * |
| | | * @param data 文件内容 |
| | | * @return 文件 |
| | | */ |
| | | @SneakyThrows |
| | | public static File createTempFile(String data) { |
| | | File file = createTempFile(); |
| | | // 写入内容 |
| | | FileUtil.writeUtf8String(data, file); |
| | | return file; |
| | | } |
| | | |
| | | /** |
| | | * 创建临时文件 |
| | | * 该文件会在 JVM 退出时,进行删除 |
| | | * |
| | | * @param data 文件内容 |
| | | * @return 文件 |
| | | */ |
| | | @SneakyThrows |
| | | public static File createTempFile(byte[] data) { |
| | | File file = createTempFile(); |
| | | // 写入内容 |
| | | FileUtil.writeBytes(data, file); |
| | | return file; |
| | | } |
| | | |
| | | /** |
| | | * 创建临时文件,无内容 |
| | | * 该文件会在 JVM 退出时,进行删除 |
| | | * |
| | | * @return 文件 |
| | | */ |
| | | @SneakyThrows |
| | | public static File createTempFile() { |
| | | // 创建文件,通过 UUID 保证唯一 |
| | | File file = File.createTempFile(IdUtil.simpleUUID(), null); |
| | | // 标记 JVM 退出时,自动删除 |
| | | file.deleteOnExit(); |
| | | return file; |
| | | } |
| | | |
| | | /** |
| | | * 生成文件路径 |
| | | * |
| | | * @param content 文件内容 |
| | | * @param originalName 原始文件名 |
| | | * @return path,唯一不可重复 |
| | | */ |
| | | public static String generatePath(byte[] content, String originalName) { |
| | | String sha256Hex = DigestUtil.sha256Hex(content); |
| | | // 情况一:如果存在 name,则优先使用 name 的后缀 |
| | | if (StrUtil.isNotBlank(originalName)) { |
| | | String extName = FileNameUtil.extName(originalName); |
| | | return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName; |
| | | } |
| | | // 情况二:基于 content 计算 |
| | | return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content)); |
| | | } |
| | | |
| | | } |