一、问题背景
目前开发某个功能需求时,需要校验sftp中文件是否存在,而不需读取其内容。
公司现有sftp功能代码都为获取文件数据并落库或其他处理。
而我这个功能只需要校验是否存在,不想使用现有方式拉取判断是否存在,拉取文件必然会有成本。
二、解决思路
stackover回答:使用 JSch,有没有办法判断远程文件是否存在,而无需执行ls并循环遍历文件以查找名称匹配?
- ls:查看目录下文件信息
- stat:stat方法确实遵循符号链接(即返回链接的属性而不是目标)
- lstat:lstat方法不遵循符号链接(即返回目标的属性而不是链接)
例如,您有一个符号链接’myhome’,它实际上是/ u02/home/alamba的快捷方式。
使用lstat,您将获得链接目标的属性’/ u02/home/alamba’文件夹。使用统计信息,您将获得“myhome”链接的属性。
还是不太清楚stat和lstat的区别。网上只找到了以上信息。
不过大致思路就是通过获取文件信息判断是否存在,获取失败都是抛出异常,自行处理即可。
三、最终解决
- 连接sftp获取对象。调用其lstat方法传入文件全路径。
- 抛出异常说明获取不到,正常返回