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

作者:kl 时间:2023-10-29 17:43:33 

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;
   }
}

来源:http://www.kailing.pub/article/index/arcid/105.html

标签:JSch,sftp,服务器,文件操作
0
投稿

猜你喜欢

  • java异常与错误处理基本知识

    2023-11-25 10:44:59
  • 解读赫夫曼树编码的问题

    2022-03-13 06:37:26
  • C# 调用 JavaWebservice服务遇到的问题汇总

    2023-04-23 04:00:49
  • Flutter Widgets MediaQuery控件屏幕信息适配

    2023-06-29 04:48:21
  • 面试中遇到的java逃逸分析问题

    2021-12-08 11:58:28
  • 详解Spring Cloud负载均衡重要组件Ribbon中重要类的用法

    2023-07-06 02:54:01
  • SpringBoot中的multipartResolver上传文件配置

    2022-01-22 11:06:51
  • Android自定义控件仿QQ编辑和选取圆形头像

    2022-11-10 09:40:37
  • VSCode中开发JavaWeb项目的详细过程(Maven+Tomcat+热部署)

    2022-10-18 14:42:10
  • macOS下Spring Boot开发环境搭建教程

    2023-11-05 15:50:59
  • SpringCloud中的Consul详解

    2023-05-26 04:56:41
  • Android开发之机顶盒上gridview和ScrollView的使用详解

    2021-08-06 11:57:59
  • 详解Android应用中ListView列表选项栏的编写方法

    2023-09-03 15:01:25
  • 浅析java 10中的var关键字用法

    2021-12-23 15:18:17
  • 实例讲解建立Android项目

    2023-10-04 17:41:20
  • Spring Cloud Alibaba使用Nacos作为注册中心和配置中心

    2021-07-15 18:18:42
  • java实现Dijkstra算法

    2021-09-02 23:14:15
  • Spring Boot如何整合FreeMarker模板引擎

    2022-09-06 15:49:32
  • Java关于MyBatis缓存详解

    2021-11-01 00:40:20
  • Android文本视图TextView实现聊天室效果

    2022-02-15 07:31:55
  • asp之家 软件编程 m.aspxhome.com