在Java中实现SFTP协议文件传输的两种解决方案
1.1 背景
1.2 关于 FTP /FTPS
1.3 关于SFTP
解决方案一:使用 JSch 库
解决方案二:使用sshj 库
这篇博文来聊聊在Java中实现SFTP协议文件传输的两种解决方案
1.1 背景
我们知道,XFTP 是一款非常流行的 FTP 文件传输工具。
其中 XFTP 目前支持两种文件传输协议
一种是FTP
另外一种是SFTP
如图所示:
当然除此之外还有一种不太常用的FTPS
那么这三种协议有哪些区别呢?
文件传输协议类型
描述
FTP
基础的文件传输
FTPS
基于TLS 加密
SFTP
基于SSH 加密
有时候我们可能会有需求,在我们的项目中使用FTP 文件传输功能。
那么在Java中有哪些解决方案呢?
1.2 关于 FTP /FTPS
Apache Commons Net™库实现了许多基本Internet协议的客户端。
支持的协议如下所示:
FTP/FTPS
FTP over HTTP (experimental)
NNTP
SMTP(S)
POP3(S)
IMAP(S)
Telnet
TFTP
Finger
Whois
rexec/rcmd/rlogin
Time (rdate) and Daytime
Echo
Discard
NTP/SNTP
其中这个类库中有如下三个类:
org.apache.commons.net.tftp.TFTPClient
支持不需要账号密码访问的FTP 协议文件传输,不支持带验证的FTP文件传输
org.apache.commons.net.ftp.FTPClient
支持FTP,不支持FTPS和SFTP
org.apache.commons.net.ftp.FTPSClient
支持FTPS,不支持SFTP
前面两种方式这里不做过多讨论,我们重点看下SFTP 协议文件传输的解决方案。
1.3 关于SFTP
关于在Java中实现SFTP协议文件传输有两个库可供使用。
使用 JSch 库
使用sshj 库
为了便于测试,我这里将账号密码等信息配置成静态工具类
代码如下所示:
/**
* @author qing-feng.zhao
*/
public class MyServerInfoConstant {
/**
* FTP IP 地址
*
*/