本工具类支持远程连接sftp,上传下载文件
需要用到是jar是jsch-0.1.29.jar

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;
import java.net.SocketTimeoutException;
import java.util.Properties;import java.util.Vector;import org.apache.log4j.Logger;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelExec;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.Session;import com.jcraft.jsch.SftpException;
/*** * @author matianyu**/public class JSchUtils {private static final Logger logger = Logger.getLogger(JSchUtils.class);private static JSch jsch;private static Session session = null;private static Channel channel = null;/*** 连接到指定的IP* * @throws JSchException*/public static ChannelSftp connect(String ftpUserName, String ftpPassword, String ftpHost, int ftpPort) throws Exception {jsch = new JSch();// 创建JSch对象session = jsch.getSession(ftpUserName, ftpHost, ftpPort);// 根据用户名、主机ip、端口号获取一个Session对象session.setPassword(ftpPassword);// 设置密码Properties config = new Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);// 为Session对象设置propertiessession.setTimeout(1000*30);// 设置超时session.connect();// 通过Session建立连接logger.info("Session connected.");channel = session.openChannel("sftp"); // 打开SFTP通道channel.connect(); // 建立SFTP通道的连接logger.info("Connected successfully to ftpHost = " + ftpHost + ",as ftpUserName = " + ftpUserName);return (ChannelSftp) channel;}/*** 关闭连接*/public static void close() {if (channel != null) {channel.disconnect();logger.info("关闭channel成功");}if (session != null) {session.disconnect();logger.info("关闭session成功");}}/*** 执行相关的命令,* 但是部分情况不可用* * @throws JSchException*/public static void execCmd(String command) throws JSchException {BufferedReader reader = null;try {if (command != null) {channel = session.openChannel("exec");((ChannelExec) channel).setCommand(command);// ((ChannelExec) channel).setErrStream(System.err);channel.connect();InputStream in = channel.getInputStream();reader = new BufferedReader(new InputStreamReader(in));String buf = null;while ((buf = reader.readLine()) != null) {logger.info(buf);}}} catch (IOException e) {e.printStackTrace();} catch (JSchException e) {e.printStackTrace();} finally {try {reader.close();} catch (IOException e) {e.printStackTrace();}channel.disconnect();}}/*** 上传文件** @param directory*            上传的目录* @param uploadFile*            要上传的文件* @param sftp* @throws JSchException* @throws SftpException* @throws FileNotFoundException*/public static void upload(String directory, String uploadFile) throws Exception {ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");channelSftp.cd(directory);File file = new File(uploadFile);channelSftp.put(new FileInputStream(file), file.getName());       logger.info("上传: " +uploadFile + "成功!");}/*** 下载文件* * @param src* @param dst* @throws JSchException* @throws SftpException*/public static void download(String src, String dst) throws Exception {// src linux服务器文件地址,dst 本地存放地址ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");channelSftp.connect();channelSftp.get(src, dst);logger.info("下载文件:"+src+"成功");channelSftp.quit();}/*** 删除文件** @param directory*            要删除文件所在目录* @param deleteFile*            要删除的文件* @param sftp* @throws SftpException* @throws JSchException*/public void delete(String directory, String deleteFile) throws Exception {ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");channelSftp.cd(directory);channelSftp.rm(deleteFile);logger.info("删除成功");}/*** 列出目录下的文件** @param directory*            要列出的目录* @param sftp* @return* @throws SftpException* @throws JSchException*/@SuppressWarnings("rawtypes")public Vector listFiles(String directory) throws Exception {ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");return channelSftp.ls(directory);}public static void main(String[] args) {try {// 1.连接到指定的服务器connect("root", "root", "127.0.0.1", 22);// 2.执行相关的命令execCmd("grep '160622150549943666' /data/apps/2017-07-07.log >> /data/20170707.txt");// 3.下载文件download("/data/nginx_log.20170707.txt", "D:\\temp");// 4.关闭连接close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

使用实例:
注意代码仅供参考:具体细节不列出
上传文件:


/************************上传数据到sftp开始*************************************///连接sftpChannelSftp sftp = JSchUtils.connect(ftpUserName, ftpPassword, ftpHost, Integer.valueOf(ftpPort));String path = ftpPath+ "/repayPlan/" + df.format(new Date());//sftp路径logger.info("sftp路径" + path);String uploadFile = outPath + "/" + newFileName + ".zip";//上传的文件logger.info("上传的文件" + uploadFile);FileInputStream in = null;try{in = new FileInputStream(new File(uploadFile));//sftp.cd(path);sftp.put(in,path + "/" + newFileName + ".zip");logger.info("上传到sftp成功");}catch(Exception e){logger.info("sftp无该文件夹,新建文件夹");sftp.mkdir(path);//sftp.cd(path);sftp.put(in,path + "/" + newFileName + ".zip");logger.info("上传到sftp成功");//e.printStackTrace();}/**************************上传数据到sftp结束************************************/

下载文件:

/************************从远程获sftp取数据开始*************************************///连接sftpChannelSftp sftp = JSchUtils.connect(ftpUserName, ftpPassword, ftpHost, Integer.valueOf(ftpPort));String path = ftpPath+ "/completed/" + df.format(rightNow.getTime());//sftp路径logger.info("path:" + path);Vector<LsEntry> v = sftp.ls(path);//获取sftp对应目录下的文件列表//遍历文件列表获取文件if (v != null && v.size() > 0) {for (int i = 0; i < v.size(); i++) {String name = v.get(i).getFilename();//文件目录下的每个文件的名字if (name.indexOf(".") == 0) {//去掉多余的文件System.out.println("开头是.");} else {logger.info(name);//参数1,远程文件地址,参数2,本地目录sftp.get(path+"/"+name, trueName);}}}/**************************从远程获sftp取数据结束************************************/

java连接sftp工具类相关推荐

  1. 基于java的SFTP工具类

    如果是FTP的看这里, 基于java的批量上传下载的FTP工具类 首先引入依赖 <dependency><groupId>org.netbeans.external</g ...

  2. java 连接mysql工具类_java连接Mysql数据库的工具类

    一个封装好的链接Mysql数据库的工具类,可以方便的获取Connection对象关闭Statement.ResultSet.Statment对象等等 复制代码 代码如下: package myUtil ...

  3. java连接ftp工具类

    这里使用了org.apache.commons.net.ftp这个类库,仅仅是对这个类库稍微封装了一下方便使用,这里写了一个工具类,大家可以参考一下. 介绍一个 ftp客户端工具:iis7服务器管理工 ...

  4. python oracle 工具类,python连接Oracle工具类

    上代码: # -*- coding:utf-8 -*- import cx_Oracle import pandas as pd class ORACLE(object): def __init__( ...

  5. java redis缓存工具类_redis工具类-JedisUtil

    redis连接的工具类 1.java中的redis java中,使用redis不会将其当作数据库来使用,更多的是作为缓存或者是消息中间件来使用.在用作缓存时,我们需要使用第三方提供的jar包来进行开发 ...

  6. Java封装OkHttp3工具类

    点击关注公众号,Java干货及时送达  作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...

  7. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  8. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  9. java时间日期工具类_java日期处理工具类

    java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...

最新文章

  1. 专业的秘密 | 南方医科大学生物信息学专业
  2. linux c 设置utc时间,C/C++标准库之转换UTC时间到local本地时间详解
  3. WIN7的MKLINK命令,创建文件(夹)连接(链接)
  4. 【Windows 逆向】使用 Cheat Engine 工具进行指针扫描挖掘关键数据内存真实地址 ( 指针扫描 )
  5. 超好用的几款可视化管理工具,你有吗?
  6. .NET 通用权限设计
  7. css selector的优先级
  8. XML Schema ---complexType-----复合元素
  9. js提交出现post错误_阿里云的 Node.js 稳定性实践
  10. 程序员如何 10 分钟用 Python 画出蒙娜丽莎?
  11. 暴力破解-----token验证
  12. 智能家居离线语音识别控制系统设计(SU-03T)
  13. 自媒体月入过万的自媒体赚钱工具,免费教会你!
  14. matlab 并联机器人,MATLAB在并联机器人运动仿真中的应用
  15. Word怎么删除空白页? 告诉你6招技巧
  16. A股各概念板块龙头股大全
  17. html炫酷在线,10款基于HTML5/CSS3的炫酷动画
  18. 理解flask中的蓝图
  19. python爬虫-京东登录
  20. matlab app designer学习笔记1——简易计算器

热门文章

  1. 28计算机表演赛获奖情况,20届无锡地区计算机表演赛获奖名单
  2. gstreamer+qgc+aarch64
  3. TensorRT加速
  4. 硬盘数据丢失能恢复吗 硬盘数据丢失怎么找回
  5. 性能测试 - - 常见的性能测试指标
  6. speedoffice,一款Excel和Word都支持的免费软件
  7. Linux常用命令和操作
  8. ubuntu 18.04初安装
  9. ubuntu18.04安装详解
  10. kubernets 集群搭建