Java使用sftp定时下载文件的示例代码

  

<强> sftp简介

  

sftp是安全文件传输协议的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法.sftp与ftp有着几乎一样的语法和功能.sftp为SSH的其中一部分,是一种传输档案至博客伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作sftp(安全文件传输协议)的安全文件信息传输子系统,sftp本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,sftp并不像一个服务器程序,而更像是一个客户端程序.sftp同样是使用加密传输认证信息和传输的数据,所以,使用sftp是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的ftp要低得多,如果您对网络安全性要求更高时,可以使用sftp代替ftp。

  

<强>添加依赖

        & lt; dependency>   & lt; groupId> com.jcraft   & lt; artifactId> jsch   & lt; version> 0.1.54   & lt;/dependency>      

<>强增加配置

        sftp:   知识产权:192.168.1.60   端口:22   超时:60000   retryTime: 3   管理:   用户名:admin   密码:2 k3xryjbd930。      

<强>代码示例

  

每天凌晨1点在多个用户目录中下载csv文件至本地tmp目录

        @ service   公共类SftpTask扩展线程{   私人ChannelSftp sftp;   私人会议会话;   @ value (" $ {sftp.admin.username} ")   私人字符串的用户名;   @ value (" $ {sftp.admin.password} ")   私人密码字符串;   @ value (" $ {sftp.host} ")   私人字符串主机;   @ value (" $ {sftp.port} ")   私人整数端口;   私人SftpService SftpService;   公共EtlSftpTask (SftpService SftpService) {   这一点。sftpService=sftpService;   }/* *   *建立sftp连接   */私人空间连接(){   尝试{   JSch JSch=new JSch ();   会话=jSch。getSession(用户名、主机、端口);   session.setPassword(密码);   会话。setConfig (“StrictHostKeyChecking”、“不”);   session.connect ();   频道频道=session.openChannel (sftp);   channel.connect ();   sftp=(ChannelSftp)通道;   }捕捉(JSchException e) {   e.printStackTrace ();   }   }/* *   *关闭sftp连接   */公共空间close () {   尝试{   如果(sftp !=null) {   如果(sftp.isConnected ()) sftp.disconnect ();   }   如果(会话!=null) {   如果(session.isConnected ()) session.disconnect ();   }   }捕捉(异常e) {   e.printStackTrace ();   }   }/* *   *下载文件到本地   *   * @param源源文件   * @param目标目标文件   * @throws SftpException异常   * @throws FileNotFoundException异常   */私人空间下载(源字符串,字符串目标)抛出SftpException FileNotFoundException {   sftp。get(源、新FileOutputStream(新文件(目标)));   }/* *   *处理用户数据文件   *   * @param根数据文件根目录   * @param lastTime上次处理文件的最后的时间   * @return本次处理文件的最后的时间   */私人整数处理(字符串,整数lastTime) {   字符串=根+目录“/事件/?   矢量文件;   尝试{   文件=sftp。ls(目录+“event_ * . csv”);   }捕捉(异常e) {   e.printStackTrace ();   返回0;   }//文件名   字符串文件名;//临时文件   字符串临时文件;//文件更新时间   整数mTime;//文件最后更新时间   整数maxTime=lastTime;//处理用户文件   (对象o:文件){   尝试{   ChannelSftp。LsEntry f=(ChannelSftp.LsEntry) o;//文件更新时间   .getMTime mTime=f.getAttrs () ();   如果(mTime & lt;=lastTime)继续;//文件名   文件名=f.getFilename ();//最后处理事件   maxTime=数学。马克斯(maxTime mTime);//下载文件   临时文件="/tmp/" +文件名;   下载(目录+文件名,临时文件);   }捕捉(异常e) {//TODO错误日志   e.printStackTrace ();   }   }//返回文件最后的处理时间   返回maxTime;   }/* *   *每天凌晨1点开始执行   */@Scheduled (cron=0 0 1 * * *)   公共空间任务(){//获取sftp连接   connect ();   字符串根;   整数lastTime;   长cid;   整数maxTime=lastTime;//获取用户列表   (SftpDTO SftpDTO: sftpService.findAll ()) {//用户主目录   根=sftpDTO.getSftpRoot ();//上次处理文件的最后时间   lastTime=sftpDTO.getLastTime ();   maxTime=数学。马克斯(maxTime处理(根,lastTime));//更新最后处理时间   如果(! maxTime.equals (lastTime)) {   sftpDTO.setLastTime (maxTime);   sftpService.update (sftpDTO);   }   }//释放sftp资源   close ();   }   }

Java使用sftp定时下载文件的示例代码