首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Java验证SFTP服务器上文件存在的一种简单方法

用Java验证SFTP服务器上文件存在的一种简单方法
EN

Stack Overflow用户
提问于 2019-09-06 09:47:23
回答 1查看 4.9K关注 0票数 1

我正在使用Apache Mina SSHD库,特别是sshd-sftp 2.3.0编写一个SFTP客户端。我选择了它而不是SSHJ库,因为可以直接将String写入远程文件,而且也没有不必要的依赖关系。

任务:将文件发送到SFTP服务器,以便备份以前的文件(如果有的话)。

我研究了SftpClient类提供的所有可能性,其中我没有找到一种搜索文件的简单方法。

  • listDirreadDir方法,它们返回Iterable <DirEntry>,但我怀疑它们将缓慢地工作在大量文件中。
  • 我们可以强制使用rename方法重命名一个文件,但在我的例子中,可以有许多备份文件,我们必须首先找到一个空闲的文件名。

当前的解决方案是获取文件的状态。如果没有这样的文件,那么将抛出一个SftpException,例如,"SFTP错误(SSH_FX_NO_SUCH_FILE):没有这样的文件或目录“。可以分析这条消息,如果文件真的找不到,那么就不要再抛出这个异常了。以下是代码:

代码语言:javascript
运行
复制
    private boolean fileExists(SftpClient sftpClient, String remoteDest) throws IOException {
        try {
            return null != sftpClient.stat(remoteDest);
        } catch (SftpException e) {
            if (e.getStatus() != SftpConstants.SSH_FX_NO_SUCH_FILE) {
                LOGGER.error("Error finding file {}", remoteDest);
                throw e;
            }
            return false;
        }
    }

主要的问题是这个解决方案是丑陋的。

然而,在互联网上,我发现只有类似的解决方案使用库JSchTrilead SSH-2 for Java

也许还有另一种更简单、更有效的方法来检查SFTP服务器上的文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-06 10:33:02

这是正确的解决办法。

SFTP协议没有“文件存在”查询/请求。最接近的等价值实际上是"stat“查询/请求。因此,即使您最喜欢的SFTP库有“文件存在”方法/API,它也会在内部执行您的代码所做的工作。

JSch:使用JSch,是否有一种方法可以判断远程文件是否存在而不执行ls?中的等价物

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57819606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档