Java连接SFTP服务器下载上传文件

公司因为业务需要,于是就需要从对方的SFTP服务器上取文件,笔者就稍微了解了一下,就写出了以下代码,希望能够帮助到大家!

public static void sshSftp(String ip, String user, String psw ,int port) throws Exception
    {
        Session session = null;
        Channel channel = null;
        JSch jsch = new JSch();
        if(port <=0)
        {
            //连接服务器,采用默认端口
            session = jsch.getSession(user, ip);
        }
        else
        {
            //采用指定的端口连接服务器
            session = jsch.getSession(user, ip ,port);
        }

        //如果服务器连接不上,则抛出异常
        if (session == null) 
        {
            throw new Exception("session is null");
        }
        //设置登陆主机的密码
        session.setPassword(psw);//设置密码   
        //设置第一次登陆的时候提示,可选值:(ask | yes | no)
        session.setConfig("StrictHostKeyChecking", "no");
        //设置登陆超时时间   
        session.connect(30000);
        try {
            //创建sftp通信通道
            channel = (Channel) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;
            Vector ls = sftp.ls("");//遍历该目录------
            //进入服务器指定的文件夹上下两行代码的顺序一定不能乱,
            //不然就会报出2:No Such file的错误error,而不是异常exception了。
            sftp.cd("");//-----------------------------------
            Iterator iterator = ls.iterator();
            while(iterator.hasNext())
            {
                Object next = iterator.next();//得到下一个元素
                System.out.println(next.toString());
                String string = next.toString();//对象toString
                if(string.endsWith("zip"))//如果是以zip结尾,那就进入
                {
                    //根据规律文件名切割字符串
                    String substring = string.substring(string.lastIndexOf(" "), string.length());
                    System.out.println(substring.trim());
                    File file=new File("g:/cxgj/"+substring.trim());
                    sftp.get(substring.trim(), new FileOutputStream(file));
                }
            }
            //列出服务器指定的文件列表
//          Vector v = sftp.ls("*.txt");
//          for(int i=0;i<v.size();i++)
//          {
//              System.out.println(v.get(i));
//          }
//           
//          //以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
//          OutputStream outstream = sftp.put("1.txt");//这两行代码的意思是把e盘 print.txt文件上传到指定SFTP服务器上,命名为1.txt
//          InputStream instream = new FileInputStream(new File("e:/print.txt"));
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            session.disconnect();
            channel.disconnect();
        }
    }

代码就是以上的,主要还是自己的理解能力,之前file有个listfile,返回的是file数组,可是,不能直接使用这个,因为,这个是listfile是本地路径的,而SFTP服务器就得用专用的方法,那就是ls。

Vector ls(String path)
lists the contents of a remote directory.
这个是从官方API里面找到的,可以使用,多看看官方API是没有坏处的,好啦。今天就到这了,下次应该会写一篇如何快速解压带压缩密码的ZIP压缩包。

欢迎大家留言,一起交流,共同进步!
By:Tiger丶D

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值