Java使用SFTP上传文件到服务器的简单使用

 更新时间:2017年02月18日 09:18:47   作者:唐凯  
这篇文章主要介绍了Java使用SFTP上传文件到服务器的简单使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下

最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询。具体代码如下所示:

 /**
  * 将文件上传到服务器
  * 
  * @param filePath
  *   文件路径
  * @param channelSftp
  *   channelSftp对象
  * @return
  */
 public static boolean uploadFile(String filePath, ChannelSftp channelSftp) {
  OutputStream outstream = null;
  InputStream instream = null;
  boolean successFlag = false;
  try {
   File isfile = new File(filePath);
   if (isfile.isFile()) {
    outstream = channelSftp.put(isfile.getName());
    File file = new File(filePath);
    if (file.exists()) {
     instream = new FileInputStream(file);
     byte b[] = new byte[1024];
     int n;
     while ((n = instream.read(b)) != -1) {
      outstream.write(b, 0, n);
     }
     outstream.flush();
    }
    successFlag = true;
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (instream != null) {
     instream.close();
    }
    if (outstream != null) {
     outstream.close();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return successFlag;
 }
 private static Session initJschSession()
   throws JSchException {
  int ftpPort = 0;
  String ftpHost = "";
  String port = "00"; //sftp的端口号
  String ftpUserName = ""; //用户名
  String ftpPassword = ""; //链接的密码
  String privateKey = ""; //
  String passphrase = "";
  if (port != null && !port.equals("")) {
   ftpPort = Integer.valueOf(port);
  }
  JSch jsch = new JSch(); // 创建JSch对象
  if (StringUtils.isNotBlank(privateKey)
    && StringUtils.isNotBlank(passphrase)) {
   jsch.addIdentity(privateKey, passphrase);
  }
  if (StringUtils.isNotBlank(privateKey)
    && StringUtils.isBlank(passphrase)) {
   jsch.addIdentity(privateKey);
  }
  jsch.getSession(ftpUserName, ftpHost, ftpPort);
  Session session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象
  if (StringUtils.isNotBlank(ftpPassword)) {
   session.setPassword(ftpPassword); // 设置密码
  }
  return session;
 }
 /**
  * 获取ChannelSftp链接
  * 
  * @param timeout
  *   超时时间
  * @return 返回ChannelSftp对象
  * @throws JSchException
  */
 public static ChannelSftp getChannelSftp(Session session, int timeout)
   throws JSchException {
  Channel channel = null;
  Properties config = new Properties();
  config.put("StrictHostKeyChecking", "no");
  session.setConfig(config); // 为Session对象设置properties
  session.setTimeout(timeout); // 设置timeout时间
  session.connect(); // 通过Session建立链接
  channel = session.openChannel("sftp"); // 打开SFTP通道
  channel.connect(); // 建立SFTP通道的连接
  return (ChannelSftp) channel; 
 }
 /**
  * 断开sftp链接
  * 
  * @param session
  *   会话
  * @param channel
  *   通道
  */
 public static void closeConnection(Channel channel, Session session) {
  try {
   if (session != null) {
    session.disconnect(); //关闭session链接
   }
   if (channel != null) {
    channel.disconnect(); //断开连接
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

这里的用户名密码都是自己设置,这里的方法进行了简单的封装,方便使用。

以上所述是小编给大家介绍的Java使用SFTP上传文件到服务器的简单使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java数组实现队列及环形队列实现过程解析

    java数组实现队列及环形队列实现过程解析

    这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 浅谈mybatisPlus的Ipage分页和map参数的问题

    浅谈mybatisPlus的Ipage分页和map参数的问题

    这篇文章主要介绍了mybatisPlus的Ipage分页和map参数的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 解决response.setHeader设置下载文件名无效的问题

    解决response.setHeader设置下载文件名无效的问题

    这篇文章主要介绍了解决response.setHeader设置下载文件名无效的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java加载ICC文件的方法和示例代码

    Java加载ICC文件的方法和示例代码

    ICC文件,通常用于颜色管理,定义了如何将一个颜色空间转换为另一个颜色空间,在Java中,我们可能需要加载这些文件来进行颜色转换或管理,本文将为您提供加载ICC文件的方法和示例代码,需要的朋友参考下吧
    2023-08-08
  • Java设计模式详解之门面模式(外观模式)

    Java设计模式详解之门面模式(外观模式)

    为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。本文给大家介绍Java设计模式详解之门面模式(外观模式),感兴趣的朋友参考下吧
    2016-04-04
  • java中继承测试代码分析

    java中继承测试代码分析

    这篇文章主要介绍了java中继承测试代码分析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java 十大排序算法之归并排序刨析

    Java 十大排序算法之归并排序刨析

    归并排序是采用分治法的一个非常典型的应用。先使每个子序列有序,再使子序列段间有序,也就是将已有的子序列合并,得到完全有序的序列;如果将两个有序表合并成一个有序表,称为二路归并
    2021-11-11
  • Spring @Retryable注解轻松搞定循环重试功能

    Spring @Retryable注解轻松搞定循环重试功能

    spring系列的spring-retry是另一个实用程序模块,可以帮助我们以标准方式处理任何特定操作的重试。在spring-retry中,所有配置都是基于简单注释的。本文主要介绍了Spring@Retryable注解如何轻松搞定循环重试功能,有需要的朋友可以参考一下
    2023-04-04
  • Spring动态数据源实现读写分离详解

    Spring动态数据源实现读写分离详解

    这篇文章主要为大家详细介绍了Spring动态数据源实现读写分离,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 使用Mybatis的Batch Insert Support 实现批量插入

    使用Mybatis的Batch Insert Support 实现批量插入

    这篇文章主要介绍了使用Mybatis的Batch Insert Support 实现批量插入。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07

最新评论