gpt4 book ai didi

java - Java验证SFTP服务器上文件是否存在的简单方法

转载 作者:行者123 更新时间:2023-11-30 05:29:39 43 4
gpt4 key购买 nike

我正在使用 Apache Mina SSHD library 编写 SFTP 客户端,具体来说sshd-sftp 2.3.0 。我选择了它而不是 SSHJ library ,因为可以写 String直接到远程文件,也没有不必要的依赖。

任务:将文件发送到 SFTP 服务器时,为之前的文件(如果有)制作备份副本。

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

  • listDirreadDir方法,它们返回 Iterable <DirEntry> ,但我怀疑如果文件数量很大,它们的运行速度会很慢。
  • 我们可以简单地使用rename强制重命名文件。方法,但就我而言,备份文件可能有很多,我们必须首先找到一个空闲的文件名。

当前的解决方案是获取文件的状态。如果没有这样的文件,则 SftpException将抛出,例如“SFTP错误(SSH_FX_NO_SUCH_FILE):没有这样的文件或目录”。可以分析此消息,如果确实找不到该文件,则不要进一步抛出此异常。这是代码:

    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 服务器上的文件?

最佳答案

这是正确的解决方案。

SFTP 协议(protocol)没有“文件是否存在”查询/请求。最接近的等效项实际上是 "stat" query/request 。因此,即使您最喜欢的 SFTP 库具有“文件是否存在”方法/API,它也会在内部执行您的代码执行的操作。

JSch 中的等效项:Using JSch, is there a way to tell if a remote file exists without doing an ls?

关于java - Java验证SFTP服务器上文件是否存在的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57819606/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com