java fttp连接服务器操作

*1.导入jsch-0.1.51.jar包
2.创建SFTP封装类:

   import com.jcraft.jsch.Channel;
    import com.jcraft.jsch.ChannelSftp;
    import com.jcraft.jsch.Session;

public class SFTP{

    private Session session;//会话 
    private Channel channel;//连接通道   
    private ChannelSftp sftp;// sftp操作类   


    public Session getSession() {
        return session;
    }
    public void setSession(Session session) {
        this.session = session;
    }
    public Channel getChannel() {
        return channel;
    }
    public void setChannel(Channel channel) {
        this.channel = channel;
    }
    public ChannelSftp getSftp() {
        return sftp;
    }
    public void setSftp(ChannelSftp sftp) {
        this.sftp = sftp;
    }


}

3.创建工具操作类:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class SFTPUtil {
	private static Logger log = LogManager.getLogger(SFTPUtil.class);
	/**
     * 连接ftp/sftp服务器
     * @param SFTP类
     */
    public static void getConnect(SFTP s) throws Exception {

                /** 密钥的密码  */ 
//      String privateKey ="key";
//        /** 密钥文件路径  */ 
//      String passphrase ="path";
        /** 主机 */ 
        String host ="";    //服务器ip地址
        /** 端口 */ 
        int port =22; 
        /** 用户名 */ 
        String username ="";   // 服务器用户名,密码
        /** 密码 */ 
        String password ="";

    Session session = null;   
    Channel channel = null;   
    ChannelSftp sftp = null;// sftp操作类  

    JSch jsch = new JSch();   


    //设置密钥和密码  
    //支持密钥的方式登陆,只需在jsch.getSession之前设置一下密钥的相关信息就可以了  
//      if (privateKey != null && !"".equals(privateKey)) {  
//             if (passphrase != null && "".equals(passphrase)) {  
//              //设置带口令的密钥  
//                 jsch.addIdentity(privateKey, passphrase);  
//             } else {  
//              //设置不带口令的密钥  
//                 jsch.addIdentity(privateKey);  
//             }  
//      }  
        session = jsch.getSession(username, host, port);   
        session.setPassword(password);   
        Properties config = new Properties();   
        config.put("StrictHostKeyChecking", "no"); // 不验证 HostKey    
        session.setConfig(config);   
        try {
            session.connect();   
        } catch (Exception e) {
            if (session.isConnected())   
                session.disconnect();   
            log.error("连接服务器失败,请检查主机[" + host + "],端口[" + port   
                    + "],用户名[" + username + "],端口[" + port   
                    + "]是否正确,以上信息正确的情况下请检查网络连接是否正常或者请求被防火墙拒绝.");   
        }
        channel = session.openChannel("sftp");   
        try {
            channel.connect();   
        } catch (Exception e) {   
            if (channel.isConnected())   
                channel.disconnect();   
            log.error("连接服务器失败,请检查主机[" + host + "],端口[" + port   
                    + "],用户名[" + username + "],密码是否正确,以上信息正确的情况下请检查网络连接是否正常或者请求被防火墙拒绝.");   
        }
        sftp = (ChannelSftp) channel;  



    s.setChannel(channel);
    s.setSession(session);
    s.setSftp(sftp);

}


/**
 * 断开连接
 * 
 */
public static void disConn(Session session,Channel channel,ChannelSftp sftp)throws Exception{
    if(null != sftp){
        sftp.disconnect();
        sftp.exit();
        sftp = null;
    }
    if(null != channel){
        channel.disconnect();
        channel = null;
    }
    if(null != session){
        session.disconnect();
        session = null;
    }
}

/**
 * 进入目录
 * @param directory
 * @throws Exception
 */
public static void cd(String directory)throws Exception { 

    SFTP s=new SFTP();
    getConnect(s);//建立连接
    Session session = s.getSession();   
    Channel channel = s.getChannel();   
    ChannelSftp sftp = s.getSftp();// sftp操作类   
    try {
        sftp.cd(directory); //目录要一级一级进
    } catch (Exception e) {
        throw new Exception(e.getMessage(),e); 
    } finally {
        disConn(session,channel,sftp);
    }
} 

/** 
 * 列出目录下的文件 
 * @param directory  要列出的目录            
 * @return list 文件名列表 
 * @throws Exception 
 */ 
 public static List<String> listFiles(String directory) throws Exception { 
     SFTP s=new SFTP();
     getConnect(s);//建立连接
     Session session = s.getSession();   
     Channel channel = s.getChannel();   
     ChannelSftp sftp = s.getSftp();// sftp操作类  
     Vector fileList=null; 
     List<String> fileNameList = new ArrayList<String>(); 
     fileList = sftp.ls(directory); //返回目录下所有文件名称
     disConn(session,channel,sftp);

     Iterator it = fileList.iterator(); 

     while(it.hasNext()) { 

         String fileName = ((LsEntry)it.next()).getFilename(); 
         if(".".equals(fileName) || "..".equals(fileName)){ 
             continue; 
          } 
         fileNameList.add(fileName); 

     } 

     return fileNameList; 
 } 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值