java实现sftp上传

需要jar包:jsch-0.1.40.jar

 

port java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import com.jcraft.jsch.Channel;
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;
import com.jcraft.jsch.UserInfo;

/**
 * sftp上传
 * @author guankai
 * @time 2009-7-24
 * @email
guankai@webgame.com.cn
 */
public class SftpHelper extends Thread {   
    private String host;   
    private String username;   
    private String password;   
    private String location;   
    private int port;   
    private String knowHosts;   
    private String osName;   
    private List<String> filenames = new ArrayList<String>();   
       
    /**
     * @param host
     * @param username
     * @param password
     * @param port
     */
    public SftpHelper(String host, String username, String password, int port) {   
        this(host, username, password, port, "");   
    }   
       
    /**
     * @param host
     * @param username
     * @param password
     * @param port
     * @param location
     */
    public SftpHelper(String host, String username, String password, int port, String location) {   
        this.host = host;   
        this.username = username;   
        this.password = password;   
        this.port = port;   
        osName = System.getProperty("os.name");   
        if (osName.toUpperCase().indexOf("WINDOWS") > -1) {   
            this.knowHosts = "c://known_hosts";   
            if(location == null || location.length() == 0){   
                this.location = "c://";   
            }   
        } else {   
            this.knowHosts = "/root/.ssh/known_hosts";   
            if(location == null || location.length() == 0){   
                this.location = "/";   
            }   
        }   
        this.location = location;   
    }   
       
    /**
     * @param filename
     */
    public void addFilename(String filename){   
        filenames.add(filename);   
    }   
    /**
     * @param filenames
     */
    public void setFilenames(List<String> filenames){   
        this.filenames = filenames;   
    }   
    public void run(){   
        upload();   
    }   
       
    /**  
     * 要上传的文件必须包含完整的路径  
     *   
     */  
    public boolean upload(){   
        if(filenames.size() == 0){
         return false;   
        }   
        Session session;   
        Channel channel;   
        JSch jsch = new JSch();   
        try {   
            jsch.setKnownHosts(knowHosts);   
            session = jsch.getSession(username, host, port);   
            session.setPassword(password);
            session.setUserInfo(new UserInfo()
         {
             public String getPassphrase()
             {
                 return null;
             }

             public String getPassword()
             {
                 return null;
             }

             public boolean promptPassword(String string)
             {
                 return false;
             }

             public boolean promptPassphrase(String string)
             {
                 return false;
             }

             public boolean promptYesNo(String string)
             {
                 return true;
             }

             public void showMessage(String string)
             {
             }
         }); 
            session.connect();   
            channel = session.openChannel("sftp");   
            channel.connect();   
            ChannelSftp c = (ChannelSftp)channel;   
            c.cd(location);   
            InputStream in = null;   
            OutputStream out = null;   
            for(int i=0; i<filenames.size(); i++){   
                String filename = filenames.get(i);   
                if(filename == null || "".equals(filename)){   
                    continue;   
                }   
                int idx= filename.lastIndexOf(File.separator);   
                String uploadname = filename.substring(idx==-1?0:idx+1);   
                out = c.put(uploadname);   
                sleep(1000);   
                in = new FileInputStream(filename);   
                byte [] b = new byte[1024];   
                int n;   
                while ((n = in.read(b)) != -1) {   
                    out.write(b);   
                }   
            }   
            out.flush();   
            out.close();   
            in.close();   
            c.disconnect();   
            session.disconnect();   
            sleep(500);   
            return true;   
        } catch (JSchException e) {   
            e.printStackTrace();   
        } catch (SftpException e) {   
            e.printStackTrace();   
        } catch (IOException e) {   
            e.printStackTrace();   
        } catch(InterruptedException e){   
            e.printStackTrace();   
        }   
        return false;   
    }   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值