You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy接收多目录参数合并文件时仅首个目录内容生效问题求解

Groovy多目录文件合并脚本修复方案

问题根因

  • 合并文件创建逻辑放在了遍历目录的循环内部,每处理一个目录就生成一个新的带时间戳的合并文件,要么后生成的文件覆盖之前的,要么最终你拿到的仅为第一个目录处理后生成的文件
  • 读取目录下文件时仅获取了纯文件名,没有拼接父目录路径,直接new File(it)会从脚本当前工作路径查找文件,无法正确读取其他目录下的文件,导致写入空内容
  • 未做入参合法性校验,无法处理传入路径不是有效目录的异常场景

修正后可用脚本

def mergeDirFilesToSingleFile(...dirPaths) {
    // 合并文件逻辑移到循环外,所有目录内容写入同一个文件
    def d = new Date()
    def mergedFileLocation = "/script/merged_allure_report_${d.getTime()}.txt"
    def mergedFile = new File(mergedFileLocation)
    mergedFile.createNewFile()

    for (dirPath in dirPaths) {
        def dir = new File(dirPath)
        // 校验入参是否为合法目录
        if (!dir.exists() || !dir.isDirectory()) {
            println "跳过无效路径:${dirPath}"
            continue
        }
        // 遍历目录下所有文件,拼接父目录路径确保能正确定位文件
        dir.listFiles().each { file ->
            if (file.isFile()) { // 只合并文件,跳过子目录
                mergedFile.append(file.getText())
            }
        }
    }
    println "合并完成,文件路径:${mergedFile.absolutePath}"
    return mergedFile
}

// 调用示例,可传入任意多个目录路径
mergeDirFilesToSingleFile('/script/json_file_1/', '/script/json_file_2/')

核心优化点

  • 合并文件全局唯一,所有目录的内容都写入同一个目标文件
  • 子文件读取时自动拼接父目录路径,不会出现文件找不到的问题
  • 增加目录合法性校验、自动跳过子目录,逻辑更健壮
  • 所有局部变量明确声明作用域,避免全局变量污染

内容的提问来源于stack exchange,提问作者wodag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:54:03