文章目录
- JSch使用介绍
- 1. jar包下载
- 2. 引入依赖
- 3. 代码实现
- 4. 验证
JSch使用介绍
JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的程序中。
1. jar包下载
maven仓库:https://mvnrepository.com/artifact/com.jcraft/jsch/0.1.55
官网:http://www.jcraft.com/jsch/
2. 引入依赖
<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version>
</dependency>
3. 代码实现
public class SFTPChannelUtils {Session session = null;Channel channel = null;public ChannelSftp getChannelSftp() throws JSchException {// ssh服务器的IP、用户名、密码和端口String sftpHost = "101.200.149.*";String sftpUsername = "root";String sftpPassword = "******";int sftpPort = 22;JSch jsch = new JSch(); // 创建JSch对象session = jsch.getSession(sftpUsername, sftpHost, sftpPort);// 获取sesson对象session.setPassword(sftpPassword);// 设置sftp访问密码Properties config = new Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);// 为session重新设置参数session.setTimeout(30000);// 设置超时session.connect();// 建立连接channel = session.openChannel("sftp"); // 打开sftp通道channel.connect();// 建立sftp通道连接return (ChannelSftp) channel;}public static void main(String[] args) {/*JSch支持三种文件传输模式:OVERWRITE 完全覆盖模式,这是JSch的 默认文件传输模式,即如果目标文件已经存在,传输的文件将完全覆盖目标文件,产生新的文件。RESUME 恢复模式,如果文件已经传输一部分,这时由于网络或其他任何原因导致文件传输中断,如果下一次传输相同的文件,则会从上一次中断的地方续传。APPEND 追加模式,如果目标文件已存在,传输的文件将在目标文件后追加。*/String srcFile = "E:\\picture.png";String destFile = "/root/data/picture/picture.png";try {SFTPChannelUtils sftpChannel = new SFTPChannelUtils();ChannelSftp channel = sftpChannel.getChannelSftp();OutputStream out = channel.put(destFile, ChannelSftp.OVERWRITE); // 这里使用OVERWRITE模式// 默认使用OVERWRITE模式byte[] buff = new byte[1024 * 256]; // 设定每次传输的数据块大小为256KBint read;if (out != null) {System.out.println("Start to read input stream");InputStream is = new FileInputStream(srcFile);do {read = is.read(buff, 0, buff.length);if (read > 0) {out.write(buff, 0, read);}out.flush();} while (read >= 0);}System.out.println("传输完成");channel.quit();sftpChannel.closeChannel();} catch (Exception e) {e.printStackTrace();}}public void closeChannel() {if (channel != null) {channel.disconnect();}if (session != null) {session.disconnect();}System.out.println("关闭");}
}

4. 验证
从代码中可以看出我们将E:\\picture.png传输到了/root/data/picture/picture.png

成功!
备注:JSch还能实现文件夹的传输,大家可以自行测试。

微信公众号先已开通,搜索 “江小南和他的小伙伴们” 就能找到我哦,各位小伙伴们可以关注一下,文章会进行同步更新,方便查看哦。











