用java写一个sftp客户端程序 能够上一个sftp的目录下载文件到本地指定目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java写一个sftp客户端程序 能够上一个sftp的目录下载文件到本地指定目录相关的知识,希望对你有一定的参考价值。

还需要装软件么?下载时directory报空指针,directory应该填什么

不需要装软件,下载需要执行sftp服务器目录和本地目录
你说的directory空指针,应该是你没有指定从sftp的哪个目录下载
参考技术A 用 apache 的 ftp client,请参考

参考资料:http://zhouzaibao.iteye.com/blog/342766

用Java验证SFTP服务器上文件是不是存在的简单方法

【中文标题】用Java验证SFTP服务器上文件是不是存在的简单方法【英文标题】:A simple way to verify the existence of a file on the SFTP server in Java用Java验证SFTP服务器上文件是否存在的简单方法 【发布时间】:2019-09-06 09:47:23 【问题描述】:

我正在使用Apache Mina SSHD library,特别是sshd-sftp 2.3.0 编写一个SFTP 客户端。我选择它而不是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;
        
    

主要问题是这个解决方案很难看。

但是,在 Internet 上,我只找到了使用库 JSch 和 Trilead SSH-2 for Java 的类似解决方案。

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

【问题讨论】:

【参考方案1】:

这是正确的解决方案。

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

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

【讨论】:

以上是关于用java写一个sftp客户端程序 能够上一个sftp的目录下载文件到本地指定目录的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中通过SFTP传输文件? [复制]

如何用html编写的网页中显示java返回值

从 Spark 服务器执行 SFTP 时,大型机服务器上的记录级别数据截断

SFTP 使用 bash 脚本发送文件

java如何导入数据库DMP文件到远程服务器上?

为 Java 客户端设置 SFTP 服务器以仅允许使用公钥下载