JSch教程使用sftp协议实现服务器文件载操作

 更新时间:2022年03月07日 17:16:57   作者:kl  
这篇文章主要为大家介绍了JSch如何使用sftp协议实现服务器文件上传下载操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

Jsch是什么?

JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器

Jsch功能很强大,博主这里主要用来做文件操作

怎么使用?

添加jar依赖

<dependency>
 <groupId>com.jcraft</groupId>
 <artifactId>jsch</artifactId>
 <version>0.1.53</version>
</dependency>

我把我的SftpUtil贴下面了,注释还算清楚

/**
 * Content :sftp协议文件上传下载
 * Created by kl on 2016/5/6.
 */
public class SftpUtil {
    /**
     * 上传文件到指定服务器
     * @param ip 连接ip
     * @param user 用户名
     * @param psw 密码
     * @param port 端口 <=0 为默认端口
     * @param fielPath 上传的服务器路径
     * @param serverFileName 服务器保存的文件名
     * @param instream 要上传的文件流
     * @throws Exception
     */
    public static void sftpFileUpload(String ip,int port, String user, String psw, String fielPath,String serverFileName,InputStream instream) throws Exception {
        Session session =getSession( ip,  user,  psw,  port);
        Channel channel = null;
        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;
            //进入服务器指定的文件夹
            sftp.cd(fielPath);
            OutputStream outstream = sftp.put(serverFileName);
            byte b[] = new byte[1024*200];//每次传输200k
            int n;
            while ((n = instream.read(b)) != -1) {
                outstream.write(b, 0, n);
            }
            outstream.flush();
            outstream.close();
            instream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.disconnect();
            if (channel!=null)channel.disconnect();
        }
    }
    /**
     * 从指定服务器下载文件到本地
     * @param ip 连接ip
     * @param user 用户名
     * @param psw 密码
     * @param port 端口 <=0 为默认端口
     * @param fielPath 服务器文件路径
     * @param serverFileName 要下载的文件名
     * @param outputStream 输出到本地的文件流
     * @throws Exception
     */
    public static void sftpFileDownload(String ip,int port, String user, String psw, String fielPath,String serverFileName,OutputStream outputStream) throws Exception {
        Session session =getSession( ip,  user,  psw,  port);
        Channel channel = null;
        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;
            //进入服务器指定的文件夹
            sftp.cd(fielPath);
            sftp.get(serverFileName,outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.disconnect();
            if (channel!=null)channel.disconnect();
        }
    }
    /**
     * 删除服务器指定文件
     * @param ip 连接ip
     * @param user 用户名
     * @param psw 密码
     * @param port 端口 <=0 为默认端口
     * @param fielPath 服务器文件路径
     * @param serverFileName 要删除的文件名
     * @throws Exception
     */
    public static void sftpFileDelete(String ip,int port, String user, String psw, String fielPath,String serverFileName) throws Exception {
        Session session =getSession( ip,  user,  psw,  port);
        Channel channel = null;
        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;
            //进入服务器指定的文件夹
            sftp.cd(fielPath);
            sftp.rm(serverFileName);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.disconnect();
            if (channel!=null)channel.disconnect();
        }
    }
    /**
     * 查看指定目录所有文件
     * @param ip
     * @param user
     * @param psw
     * @param port
     * @param fielPath
     * @throws Exception
     */
    public static Vector  seeServerFileList(String ip, int port,String user, String psw,  String fielPath)throws Exception{
        Session session =getSession( ip,  user,  psw,  port);
        Channel channel = null;
        Vector v=null;
        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;
            //进入服务器指定的文件夹
            sftp.cd(fielPath);
            //列出服务器指定的文件列表
             v = sftp.ls(fielPath);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.disconnect();
            if (channel!=null)channel.disconnect();
        }
        return  v;
    }
    /**
     * 连接服务器
     * @param ip 服务器地址
     * @param user 用户名
     * @param psw  密码
     * @param port  连接端口
     * @return
     * @throws Exception
     */
    public static Session getSession(String ip, String user, String psw, int port)throws Exception{
        Session session = null;
        JSch jsch = new JSch();
        if (port <= 0) {
            //连接服务器,采用默认端口
            session = jsch.getSession(user, ip);
        } else {
            session = jsch.getSession(user, ip, port);
        }
        //如果服务器连接不上,则抛出异常
        if (session == null) {
            throw new Exception("sftp session is null");
        }
        session.setPassword(psw);//设置密码
        //设置登陆超时时间
        session.connect(30000);//30s
        return  session;
    }
}

以上就是JSch教程使用sftp协议实现服务器文件上传下载操作的详细内容,更多关于JSch sftp协议服务器文件上传下载的资料请关注脚本之家其它相关文章!

相关文章

  • java中hasNextInt判断后无限循环输出else项的解决方法

    java中hasNextInt判断后无限循环输出else项的解决方法

    这篇文章主要介绍了java中hasNextInt判断后无限循环输出else项的解决方法的相关资料,需要的朋友可以参考下
    2016-10-10
  • 教你如何把Eclipse创建的Web项目(非Maven)导入Idea

    教你如何把Eclipse创建的Web项目(非Maven)导入Idea

    这篇文章主要介绍了教你如何把Eclipse创建的Web项目(非Maven)导入Idea,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • java 二分法算法的实例

    java 二分法算法的实例

    这篇文章主要介绍了java 二分法算法的实例的相关资料,希望通过本文大家能够掌握二分法,需要的朋友可以参考下
    2017-09-09
  • Spring Boot实战之静态资源处理

    Spring Boot实战之静态资源处理

    这篇文章主要介绍了Spring Boot实战之静态资源处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java基础强化训练输入错误即结束进程

    Java基础强化训练输入错误即结束进程

    本文主要介绍了Java编程的基础知识强化应用,文中实例涉及到了许多基础知识,new对象,控制台输入,if语句等。很实用,需要的朋友可以参考下
    2017-09-09
  • spring boot写java web和接口

    spring boot写java web和接口

    这篇文章主要介绍了spring boot写java web和接口,Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置,下面详细内容需要的小伙伴可以参考一下
    2022-01-01
  • 教你如何编写简单的网络爬虫

    教你如何编写简单的网络爬虫

    实际的爬虫是从一系列的种子链接开始。种子链接是起始节点,种子页面的超链接指向的页面是子节点(中间节点),对于非html文档,如excel等,不能从中提取超链接,看做图的终端节点
    2013-10-10
  • Java高级之虚拟机加载机制的实例讲解

    Java高级之虚拟机加载机制的实例讲解

    下面小编就为大家分享一篇Java高级之虚拟机加载机制的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java浅析代码块与构造块及静态块三者之间的关系

    Java浅析代码块与构造块及静态块三者之间的关系

    所谓代码块是指用"{}"括起来的一段代码,根据其位置和声明的不同,可以分为普通代码块、构造块、静态块、和同步代码块。如果在代码块前加上synchronized关键字,则此代码块就成为同步代码块
    2022-07-07
  • JavaMe开发绘制可自动换行文本

    JavaMe开发绘制可自动换行文本

    JavaMe Graphics类中的drawString不支持文本换行,这样绘制比较长的字符串时,文本被绘制在同一行,超过屏幕部分的字符串被截断了。如何使绘制的文本能自动换行呢?
    2015-09-09

最新评论