用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
类提供的所有可能性,其中我没有找到一种简单的方法来搜索文件。
listDir
和readDir
方法,它们返回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的目录下载文件到本地指定目录的主要内容,如果未能解决你的问题,请参考以下文章