import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session; /**
* @description SFTP工具
* @author Luxh
*/
public class SFTPUtils { private static final Logger Log = LoggerFactory.getLogger(SFTPUtils.class); /**FTP协议*/
private static final String FTP_PROTOCOL = "sftp"; /**
* 获取session
* @param host
* @param port
* @param username
* @param password
* @return
*/
public static Session getSession(String host, int port, String username, String password) {
Session session = null;
try {
Log.info("init session..."); JSch jsch = new JSch();
session = jsch.getSession(username, host, port);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(); Log.info("init session successful");
}catch(Exception e) {
Log.error("init session failed"); }
return session;
} /**
* 获取 ChannelSftp
* @param session
* @return
*/
public static ChannelSftp getChannelSftp(Session session){
ChannelSftp sftp = null;
try{
Log.info("init ChannelSftp..."); Channel channel = session.openChannel(FTP_PROTOCOL);
channel.connect();
sftp = (ChannelSftp) channel; Log.info("init ChannelSftp successful");
}catch(Exception e) {
Log.error("init ChannelSftp failed"); }
return sftp; } /**
* 上传
* @param src 源文件路径
* @param dst 目标文件路径
* @param sftp
*/
public static void upload(String src, String dst, ChannelSftp sftp) {
try {
Log.info("begin upload...");
Log.info("src file is:{}", src);
Log.info("dst file is:{}", dst);
sftp.put(src, dst);
Log.info("upload successful");
} catch (Exception e) {
Log.error("upload failed"); }
} /**
* 下载
* @param src 要下载的文件
* @param dst 存放路径
* @param sftp
*/
public static void download(String src, String dst, ChannelSftp sftp) {
try {
Log.info("begin download...");
Log.info("src file is:{} ", src);
Log.info("dst file is:{} ", dst);
sftp.get(src, dst);
Log.info("download successful");
} catch (Exception e) {
Log.error("download failed"); }
} /**
* 删除
* @param path 要删除的文件路径
* @param sftp
*/
public static void delete(String path, ChannelSftp sftp) {
try {
Log.info("begin delete...");
Log.info("dst file is: {}", path);
sftp.rm(path);
Log.info("delete successful");
} catch (Exception e) {
Log.error("delete failed"); }
} /**
* 关闭连接
* @param session
* @param sftp
*/
public static void close(Session session, ChannelSftp sftp){
if(sftp != null) {
sftp.disconnect();
Log.info("ChannelSftp disconnect");
}
if(session != null) {
session.disconnect();
Log.info("Session disconnect");
}
} }

  

  使用了jsch库:http://www.jcraft.com/jsch/

Java操作SFTP的更多相关文章

  1. .net 操作sftp服务器

    因为项目的需要,整理了一段C#操作sftp的方法. 依赖的第三方类库名称为:SharpSSH 1.1.1.13. 代码如下: 1: using System; 2: using System.Coll ...

  2. java操作FTP的一些工具方法

    java操作FTP还是很方便的,有多种开源支持,这里在apache开源的基础上自己进行了一些设计,使用起来更顺手和快捷. 思路: 1.设计FTPHandler接口,可以对ftp,sftp进行统一操作, ...

  3. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  4. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  5. Java操作Oracle

    public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...

  6. JAVA操作ORACLE数据库的存储过程

    一.任务提出 JAVA操作oracle11g存储过程实验需要完成以下几个实例: 1.调用没有返回参数的过程(插入记录.更新记录) 2.有返回参数的过程 3.返回列表的过程 4.返回带分页的列表的过程. ...

  7. JAVA操作MongoDB数据库

    1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...

  8. Java操作Session与Cookie

    1,Java操作Session Java操作Session非常简单,步骤如下 1.1,在servlet中通过request获取session HttpSession session = request ...

  9. JAVA操作COOKIE

    JAVA操作COOKIE 1.设置Cookie Cookie cookie = new Cookie("key", "value"); cookie.setMa ...

随机推荐

  1. python打印目录下的文件名

    打印当前目录所有文件名 import fnmatch, os def allFiles(root, patterns = '*', single_level = False, yield_folder ...

  2. Appium移动自动化测试(一)--安装Appium

    Appium 自动化测试是很早之前就想学习和研究的技术了,可是一直抽不出一块完整的时间来做这件事儿.现在终于有了. 反观各种互联网的招聘移动测试成了主流,如果再不去学习移动自动化测试技术将会被淘汰. ...

  3. apply和call

    call和apply是定义在Function.prototype上的方法. 共同点:可以自由指定函数执行时内部this的指向 不同点:传参方式不同 call方法: 语法:call(thisObj,Ob ...

  4. 个人开发者做一款Android App需要知道的事情

    个人开发者做一款Android App需要知道的事情 在大学时, 自己是学计算机专业的,而且还和老师一起做过一年半的项目. 有时候是不是有这样的想法,做一个自己的网站.但一直未付诸行动.2012年时, ...

  5. 说说chrome上的JS调试

    步骤:审查元素 ->source->选择js文件 ->设置断点 ->触发函数 ->进入调试点step over 到elements目录下双击某一块代码还可以立刻修改,ct ...

  6. RFID Hacking④:使用ProxMark3 破解门禁

    文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! 0×00 前言 国际黑客大会Defcon传统之一:开锁!因为黑客认为锁也是一种安全挑战.我们在黑客题材电影.电视剧中也常常 ...

  7. HttpContext.Current.Cache 和HttpRuntime.Cache的区别

    先看MSDN上的解释:      HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.      HttpRuntime.Cache:获取当前应用程序的Cac ...

  8. CentOS 6.5 安装CodeBlocks

    CentOS 6.5 安装CodeBlocks 经历了无数痛苦的折磨,Linux上的库依赖真是能把人逼疯,终于在Google上找到了办法,勉强将CodeBlocks安装成功. 1.为了避免最新版本的C ...

  9. NOIP2015 跳石头

    一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N块岩石(不含起点和终点的岩石). ...

  10. word转pdf字体格式变乱的问题

    完成word转pdf的功能之后,本地测试没问题,然后发布到服务器上,就遇到了字体变乱的问题,如下: 由于我本地发布后导出没有出现同样情况,而服务器和本地的最大区别在于字体库,于是,把服务器上关于需要用 ...