Groovy脚本中使用+拼接File对象与字符串报错的原因排查
Groovy拼接File对象与字符串报错:java.io.File.plus() is applicable for arguments types: (java.lang.String)
问题描述
我编写了如下Groovy脚本,尝试获取目录名和文件名:
File dir = new File("C://Users//avidCoder//Project") log.info dir //获取目录路径 String fileName = "Demo_Data" + ".json" log.info fileName //获取文件名 String fullpath = dir + "\\" + fileName log.info fullpath //获取完整路径时出错
运行该脚本时出现异常:
"java.io.File.plus() is applicable for arguments types: (java.lang.String) value: []"
请问为何拼接完整路径会报错?
解决方案
这个问题我之前也碰到过,核心原因很简单:你直接把File对象和字符串做拼接操作了——Groovy中的File类并没有实现支持与String相加的plus()方法,所以当你执行dir + "\\"时,JVM找不到对应的方法,就抛出了这个异常。
下面给你几种正确拼接完整路径的方式:
1. 先将File对象转为字符串路径
你可以通过getAbsolutePath()或者path属性把File对象转换成字符串形式的路径,再和文件名拼接:
File dir = new File("C://Users//avidCoder//Project") String fileName = "Demo_Data.json" // 方式1:用getAbsolutePath() String fullpath = dir.getAbsolutePath() + "\\" + fileName // 方式2:用path属性 String fullpath = dir.path + "\\" + fileName log.info fullpath
2. 直接使用File类的构造方法(推荐)
Groovy的File类支持传入父目录File对象和子文件名来创建新的File实例,这样既安全又能避免手动拼接路径分隔符的问题(还能跨平台适配):
File dir = new File("C://Users//avidCoder//Project") String fileName = "Demo_Data.json" File fullFile = new File(dir, fileName) String fullpath = fullFile.getAbsolutePath() log.info fullpath
3. 使用Groovy字符串插值
利用Groovy的字符串插值特性,直接把File对象的路径属性插入到字符串中:
File dir = new File("C://Users//avidCoder//Project") String fileName = "Demo_Data.json" String fullpath = "${dir.path}\\${fileName}" log.info fullpath
内容的提问来源于stack exchange,提问作者avidCoder
相关产品推荐
相关产品推荐

