zoukankan      html  css  js  c++  java
  • JSch

    http://www.byywee.com/page/M0/S755/755589.html

    本文只介绍如何应用JSch实现的SFTP功能。
      SFTP是Secure File Transfer Protocol的缩写,安然文件传送和谈。可认为传输文件供给一种安然的加密办法。SFTP 为 SSH的一部份,是一种传输文件到办事器的安然体式格式。SFTP是应用加密传输认证信息和传输的数据,所以,应用SFTP是很是安然的。然则,因为这种传输体式格式应用了加密/解密技巧,所以传输效力比通俗的FTP要低得多,若是您对收集安然性请求更高时,可以应用SFTP庖代FTP。(来自百度的申明) 
      要应用JSch,须要下载它的jar包,请从官网下载它:http://www.jcraft.com/jsch/
     
    ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的办法,如:
    put():      文件上传
    get():      文件下载
    cd():       进入指定目次
    ls():       获得指定目次下的文件列表
    rename():   重定名指定文件或目次
    rm():       删除指定文件
    mkdir():    创建目次
    rmdir():    删除目次
    等等(这里省略了办法的参数,put和get都有多个重载办法,具体请看源代码,这里不一一列出。)
     
    JSch支撑三种文件传输模式:

    OVERWRITE 完全覆盖模式,这是JSch的默认文件传输模式,即若是目标文件已经存在,传输的文件将完全覆盖目标文件,产生新的文件。
    RESUME

    恢复模式,若是文件已经传输一项目组,这时因为收集或其他任何原因导致文件传输中断,若是下一次传输雷同的文件,


    则会从上一次中断的处所续传。

    APPEND 追加模式,若是目标文件已存在,传输的文件将在目标文件后追加。

    创建ChannelSftp对象
    编写一个对象类,按照ip,用户名及暗码获得一个SFTP channel对象,即ChannelSftp的实例对象,在应用法度中就可以应用该对象来调用SFTP的各类操纵办法。
    SFTPChannel.java
      1 package com.longyg.sftp;
      2 
      3 
      4 
      5 import java.util.Map;
      6 
      7 import java.util.Properties;
      8 
      9 
     10 
     11 import org.apache.log4j.Logger;
     12 
     13 
     14 
     15 import com.jcraft.jsch.Channel;
     16 
     17 import com.jcraft.jsch.ChannelSftp;
     18 
     19 import com.jcraft.jsch.JSch;
     20 
     21 import com.jcraft.jsch.JSchException;
     22 
     23 import com.jcraft.jsch.Session;
     24 
     25 
     26 
     27 public class SFTPChannel {
     28 
     29     Session session = null;
     30 
     31     Channel channel = null;
     32 
     33 
     34 
     35     private static final Logger LOG = Logger.getLogger(SFTPChannel.class.getName());
     36 
     37 
     38 
     39     public ChannelSftp getChannel(Map<String, String> sftpDetails, int timeout) throws JSchException {
     40 
     41 
     42 
     43         String ftpHost = sftpDetails.get(SFTPConstants.SFTP_REQ_HOST);
     44 
     45         String port = sftpDetails.get(SFTPConstants.SFTP_REQ_PORT);
     46 
     47         String ftpUserName = sftpDetails.get(SFTPConstants.SFTP_REQ_USERNAME);
     48 
     49         String ftpPassword = sftpDetails.get(SFTPConstants.SFTP_REQ_PASSWORD);
     50 
     51 
     52 
     53         int ftpPort = SFTPConstants.SFTP_DEFAULT_PORT;
     54 
     55         if (port != null && !port.equals("")) {
     56 
     57             ftpPort = Integer.valueOf(port);
     58 
     59         }
     60 
     61 
     62 
     63         JSch jsch = new JSch(); // 创建JSch对象
     64 
     65         session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 按照用户名,主机ip,端口获取一个Session对象
     66 
     67         LOG.debug("Session created.");
     68 
     69         if (ftpPassword != null) {
     70 
     71             session.setPassword(ftpPassword); // 设置暗码
     72 
     73         }
     74 
     75         Properties config = new Properties();
     76 
     77         config.put("StrictHostKeyChecking", "no");
     78 
     79         session.setConfig(config); // 为Session对象设置properties
     80 
     81         session.setTimeout(timeout); // 设置timeout时候
     82 
     83         session.connect(); // 经由过程Session建树链接
     84 
     85         LOG.debug("Session connected.");
     86 
     87 
     88 
     89         LOG.debug("Opening Channel.");
     90 
     91         channel = session.openChannel("sftp"); // 打开SFTP通道
     92 
     93         channel.connect(); // 建树SFTP通道的连接
     94 
     95         LOG.debug("Connected successfully to ftpHost = " + ftpHost + ",as ftpUserName = " + ftpUserName
     96 
     97                 + ", returning: " + channel);
     98 
     99         return (ChannelSftp) channel;
    100 
    101     }
    102 
    103 
    104 
    105     public void closeChannel() throws Exception {
    106 
    107         if (channel != null) {
    108 
    109             channel.disconnect();
    110 
    111         }
    112 
    113         if (session != null) {
    114 
    115             session.disconnect();
    116 
    117         }
    118 
    119     }
    120 
    121 }
  • 相关阅读:
    java对redis的基本操作
    关于Java异常和错误的几个问题
    「hadoop」fs.defaultFS 9000 端口在外面连不上
    「ubuntu」修改权限和owner命令
    「ubuntu」pkexec超级修改权限
    「ubuntu」vim 基本使用
    「ubuntu」修改主机名
    「hadoop」ssh
    「vmware」虚拟机与主机共享目录
    「spring」定时任务(纯注解方式)
  • 原文地址:https://www.cnblogs.com/lvfeilong/p/ewrw423dgfd.html
Copyright © 2011-2022 走看看