From e15423b9f728565dd66f8a816287f64903fd4a93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=A4=A7?= <1504665037@qq.com> Date: Wed, 28 Jan 2026 09:19:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=88=AA=E7=BA=BF=E5=90=8D=E7=A7=B0=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/utils/file/FileUtils.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java index 78e5410..b90b0b6 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java @@ -250,4 +250,57 @@ public class FileUtils String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); return encode.replaceAll("\\+", "%20"); } + + /** + * 处理文件名序号,生成不重复的文件名 + * + * @param baseName 基础文件名 + * @param existingNames 已存在的文件名列表 + * @return 处理后的文件名 + */ + public static String generateUniqueFileName(String baseName, java.util.List existingNames) + { + if (existingNames == null || existingNames.isEmpty()) + { + return baseName; + } + + java.util.List existingIndices = new java.util.ArrayList<>(); + + // 收集所有已存在的序号 + for (String existingName : existingNames) + { + if (existingName != null) + { + // 匹配格式:文件名(数字) + java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^" + java.util.regex.Pattern.quote(baseName) + "\\s*\\((\\d+)\\)$"); + java.util.regex.Matcher matcher = pattern.matcher(existingName); + if (matcher.find()) + { + int index = Integer.parseInt(matcher.group(1)); + existingIndices.add(index); + } + } + } + + // 排序序号列表 + java.util.Collections.sort(existingIndices); + + // 找到第一个可用的序号 + int availableIndex = 1; + for (int index : existingIndices) + { + if (index == availableIndex) + { + availableIndex++; + } + else if (index > availableIndex) + { + break; + } + } + + // 生成新的文件名 + return baseName + " (" + availableIndex + ")"; + } }