【实用技巧篇】JSch使用介绍,实用JSch实现文件传输

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]; // 设定每次传输的数据块大小为256KB
			int 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还能实现文件夹的传输,大家可以自行测试。

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻啦猫@_@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值