如何检查文件是否存在?FTP文件检查代码无返回值且报错求助
解决FTP文件存在检查的报错问题
看了你的代码和报错信息,这里有几个明确的问题导致了报错和无返回值,我帮你逐一梳理并修正:
1. 方法名大小写错误(核心报错原因)
你提到报错的行Boolean t = fileslist.Exists(),这里犯了Java/Groovy大小写敏感的关键错误:FTPFile类的判断方法是exists()(小写开头),不是Exists(),这个大小写差异会直接抛出NoSuchMethodError。
2. 变量名拼写不一致
你定义的变量是FTPFile[] fileslist = ftpClient.listFiles("/Sample.txt"),但后续遍历却写了filelist.each{...}——这里filelist少了一个s,属于未定义变量,会触发MissingPropertyException,自然也不会有任何返回值。
3. 文件存在性检查的逻辑冗余
当你用ftpClient.listFiles("/Sample.txt")直接传入文件名时,如果文件存在,返回的数组会包含一个FTPFile对象;如果不存在,返回的是空数组。完全不需要遍历数组调用exists(),直接判断数组是否非空即可。
修正后的完整代码
def start() { def server = "你的FTP服务器地址" def user = "你的FTP用户名" def pass = "你的FTP密码" FTPClient ftpClient = new FTPClient() try { // 验证连接和登录是否成功 if (!ftpClient.connect(server)) { println "无法连接到FTP服务器" return } if (!ftpClient.login(user, pass)) { println "FTP登录失败" ftpClient.disconnect() return } ftpClient.enterLocalPassiveMode() ftpClient.setFileType(FTP.BINARY_FILE_TYPE) // 核心:检查文件是否存在 FTPFile[] targetFiles = ftpClient.listFiles("/Sample.txt") boolean isFileExist = targetFiles != null && targetFiles.length > 0 println isFileExist ? "文件/Sample.txt存在" : "文件/Sample.txt不存在" } catch (IOException e) { println "FTP操作出错:${e.getMessage()}" e.printStackTrace() } finally { // 确保资源释放 if (ftpClient.isConnected()) { try { ftpClient.disconnect() } catch (IOException e) { e.printStackTrace() } } } } // 注意:调用要放在函数定义之后,否则会触发未定义方法错误 start()
额外优化建议
- 函数调用顺序:原代码里
start()写在函数定义之前,Groovy从上到下执行代码,此时函数还未加载,会抛出MissingMethodException,一定要把调用放在函数定义之后。 - 不要忽略返回值:
connect()和login()都有布尔返回值,提前验证可以快速定位连接/登录失败的问题,避免后续无效操作。 - 异常捕获:FTP操作容易出现IO异常(比如网络中断、权限不足),用try-catch-finally包裹能保证资源正确释放,同时捕获错误信息方便排查。
内容的提问来源于stack exchange,提问作者chanbasha sk
相关产品推荐
相关产品推荐

