java连接sftp工具类
本工具类支持远程连接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工具类相关推荐
- 基于java的SFTP工具类
如果是FTP的看这里, 基于java的批量上传下载的FTP工具类 首先引入依赖 <dependency><groupId>org.netbeans.external</g ...
- java 连接mysql工具类_java连接Mysql数据库的工具类
一个封装好的链接Mysql数据库的工具类,可以方便的获取Connection对象关闭Statement.ResultSet.Statment对象等等 复制代码 代码如下: package myUtil ...
- java连接ftp工具类
这里使用了org.apache.commons.net.ftp这个类库,仅仅是对这个类库稍微封装了一下方便使用,这里写了一个工具类,大家可以参考一下. 介绍一个 ftp客户端工具:iis7服务器管理工 ...
- python oracle 工具类,python连接Oracle工具类
上代码: # -*- coding:utf-8 -*- import cx_Oracle import pandas as pd class ORACLE(object): def __init__( ...
- java redis缓存工具类_redis工具类-JedisUtil
redis连接的工具类 1.java中的redis java中,使用redis不会将其当作数据库来使用,更多的是作为缓存或者是消息中间件来使用.在用作缓存时,我们需要使用第三方提供的jar包来进行开发 ...
- Java封装OkHttp3工具类
点击关注公众号,Java干货及时送达 作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...
- UrlUtils工具类,Java URL工具类,Java URL链接工具类
UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...
- java轻量级并行工具类_16 个超级实用的 Java 工具类
原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...
- java时间日期工具类_java日期处理工具类
java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...
最新文章
- 专业的秘密 | 南方医科大学生物信息学专业
- linux c 设置utc时间,C/C++标准库之转换UTC时间到local本地时间详解
- WIN7的MKLINK命令,创建文件(夹)连接(链接)
- 【Windows 逆向】使用 Cheat Engine 工具进行指针扫描挖掘关键数据内存真实地址 ( 指针扫描 )
- 超好用的几款可视化管理工具,你有吗?
- .NET 通用权限设计
- css selector的优先级
- XML Schema ---complexType-----复合元素
- js提交出现post错误_阿里云的 Node.js 稳定性实践
- 程序员如何 10 分钟用 Python 画出蒙娜丽莎?
- 暴力破解-----token验证
- 智能家居离线语音识别控制系统设计(SU-03T)
- 自媒体月入过万的自媒体赚钱工具,免费教会你!
- matlab 并联机器人,MATLAB在并联机器人运动仿真中的应用
- Word怎么删除空白页? 告诉你6招技巧
- A股各概念板块龙头股大全
- html炫酷在线,10款基于HTML5/CSS3的炫酷动画
- 理解flask中的蓝图
- python爬虫-京东登录
- matlab app designer学习笔记1——简易计算器