Java sftp上传文件 三种方法

1 篇文章 0 订阅
1 篇文章 0 订阅

最近工作中需要利用sftp上传文件,因为各种原因三种方法都试过了。找到个可以用。现在把我已经试用的三种方法简单的介绍下:

一:jsch-0.1.54.jar  所支持的方法

在linux与linux服务器之间用这个方法进行sftp交互,容易报错。对环境要求比较高,jdk1.8 以上,然后对两个服务器之间的ssh版本也有要求,有些版本下也容易出错,我在工作中遇到的情况是 ssh 6.6    5.1 都没有问题,但是在7.3的版本就遇到了问题,例如com.jcraft.jsch.JSchException: Session.connect: java.io.IOException: End of IO Stream Read。用网上提供的方法,也成功不了。最后就弃用了这种方法。

        这种方法例子很多,代码就不贴了。


二:j2ssh-core-0.2.9.jar 所支持的方法

这个方法,主要问题就是在执行程序中,第一次登陆会在控制台询问是否接受公匙,为了避免这种询问,需要重写ConsoleKnownHostsKeyVerification这个类,目前没有找到好的方法重写这个类。弃用了。


三:edtFTPj-pro-4.8.1.jar 所支持的方法

代码如下,最后用的这个类的方法,没有碰到奇怪的问题。

import com.enterprisedt.net.ftp.pro.ProFTPClientInterface;
import com.enterprisedt.net.ftp.ssh.SSHFTPClient;
import com.enterprisedt.util.license.License;


public class SftpUtil {
    private ProFTPClientInterface client = null;
    public SftpUtil() {
        initLicense();
    }
    
    /**
     * 初始化证书信息
     */
    private void initLicense() {
        License.setLicenseDetails("hello", "371-2454-4908-7510");
    }
    public void connectServerBySFTP(String sftpHost, int sftpPort, String sftpUserName,String sftpPassword) throws Exception {
        SSHFTPClient sshftpClient = new SSHFTPClient();
        sshftpClient.setRemoteHost(sftpHost);
        sshftpClient.setRemotePort(sftpPort);
        sshftpClient.getValidator().setHostValidationEnabled(false);
        sshftpClient.setAuthentication(sftpUserName, sftpPassword);
        sshftpClient.setControlEncoding("UTF-8");
        sshftpClient.connect();
        client = sshftpClient;
        System.out.println("成功连接" + sftpHost);
    }
    public String putBySftp(String localPath, String dstPath, String suffixName, String sftpHost, int sftpPort, String sftpUserName,String sftpPassword) {
        String message ="上传失败!";
        try {
            connectServerBySFTP(sftpHost,  sftpPort,  sftpUserName, sftpPassword);
            String src = localPath +"\\" + suffixName ;
            String os = System.getProperty("os.name");
              if (os != null && os.toLowerCase().indexOf("windows") > -1) {
                  src = localPath +"\\" + suffixName ;
              } else {
                  src = localPath +"/" + suffixName ;;                 
              }   
            String dst = dstPath +"/" + suffixName ;
            boolean  flag=client.exists(dst);
            if(flag){
                client.delete(dst);
            }
            
            String ssss=client.put(src, dst);
            flag=client.exists(dst);
            if(flag){
                message=ssss+"上传成功!";
            }else{
                message="上传失败";
            }
            client.quit();
        } catch (Exception e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
        return message;
    }
    /**
     * 关闭FTP客户端连接
     *
     * @return 关闭成功标识
     */
    public void disconnect() {
        try {
            client.quit();
            System.out.println("sftp 连接关闭成功");
        } catch (Exception e) {
            System.out.println("sftp 关闭失败:"+e);
        }
    }

}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值