Groovy使用findFiles方法仅获取文件名而非完整路径失效问题的解决思路
解决Groovy findFiles无法获取文件名的问题
我来帮你梳理下这个问题的可行解决思路,大概率是因为对findFiles返回对象的属性使用方式或者环境细节没匹配上:
先确认返回对象的属性细节
首先可以先打印出findFiles返回的文件对象的完整信息,看看它到底包含哪些属性,避免误解对象类型:def dateien = findFiles(glob: "**/xx/xx/xx/*.zip") dateien.each { it -> echo "完整文件对象:${it}" echo "对象所有属性:${it.properties}" }如果是Jenkins Pipeline环境下,
findFiles返回的是FileWrapper类型,它的name属性理论上是存在的,但有时候会因为Pipeline的脚本沙箱限制或者版本差异导致属性访问异常,这时候可以换个更稳妥的方式提取文件名。手动从路径中提取文件名
不管返回对象的属性是否可用,都可以通过路径字符串来手动截取文件名,这是不受环境限制的通用方法:def dateien = findFiles(glob: "**/xx/xx/xx/*.zip") dateien.each { file -> // 方式1:用File类解析路径 def fileName = new File(file.path).name // 方式2:用字符串分割截取最后一段(适合Unix类路径) // def fileName = file.path.split('/').last() echo "upload file ${fileName} to ${trgDir}" upload(serverId, fileName, "${trgDir}${fileName}") }这两种方式都能从完整路径中精准提取到最后的文件名,不会受对象属性的限制。
检查glob匹配的有效性
另外可以先确认dateien数组是否真的匹配到了目标文件,比如先打印数组的基础信息:echo "找到的文件数量:${dateien.size()}" echo "找到的文件路径:${dateien*.path}"如果数组为空或者路径不符合预期,那就要先调整glob表达式,确保能正确匹配到你要的zip文件。
内容的提问来源于stack exchange,提问作者user1938143
相关产品推荐
相关产品推荐

