<强> 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定时下载文件的示例代码