如何从FTP服务器获取并打印文件列表?请求代码检查
FTP文件列表读取代码问题排查与优化
我帮你检查了这段Groovy代码,发现几个需要修正的问题,同时给你优化后的版本:
存在的问题
- 函数调用顺序错误:你先调用了
start()再定义这个函数,Groovy执行时会找不到这个方法,直接报错。 - 资源泄漏风险:
return fileslist;写在ftpClient.disconnect()前面,导致断开连接的代码永远不会执行,FTP连接会一直占用资源。 - 未定义的变量:
server、user、pass这三个关键变量没有看到赋值,运行时会抛出变量未定义的异常。 - 缺少文件打印逻辑:你的代码返回了文件列表,但没有实现打印输出的逻辑,没法看到具体的文件详情。
优化后的代码
// 先定义所需变量,替换成你的实际FTP信息 def server = "your-ftp-server-address" def user = "your-username" def pass = "your-password" // 先定义函数再调用 def start() { def ftpClient = new FTPClient() try { ftpClient.connect(server) println(ftpClient.replyString) ftpClient.login(user, pass) ftpClient.enterLocalPassiveMode() def fileslist = ftpClient.listFiles("/") // 遍历文件列表并打印详细信息 fileslist.each { file -> def details = file.isDirectory() ? "<DIR>" : file.size() println("${file.timestamp.format('MM-dd-yy hh:mmaa')} ${details} ${file.name}") } return fileslist } finally { // 确保无论是否异常都能断开连接 if (ftpClient.isConnected()) { ftpClient.disconnect() } } } // 调用函数 start()
修正说明
- 调整了函数定义和调用的顺序,确保调用时函数已经存在
- 使用
try-finally块包裹FTP操作,保证即使出现异常,连接也能被正确关闭,避免资源泄漏 - 添加了变量定义的示例,你需要替换成自己的FTP服务器信息
- 增加了文件列表的遍历打印逻辑,区分文件和目录,输出格式和你提供的示例一致
你提供的输出示例
04-03-18 05:20PM 4 Autoplus.txt
04-03-18 08:13PM 19 Autoplus6.txt
03-30-18 06:36PMsample Re...
内容的提问来源于stack exchange,提问作者Raj s
相关产品推荐
相关产品推荐

