热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

SFTP为SSH的其中一部分,是一种传输档案至Blogger伺服器的安全方式。接下来通过本文给大家介绍了Java使用sftp定时下载文件的示例代码,感兴趣的朋友跟随脚本之家小编一起看看吧

sftp简介

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

添加依赖


  com.jcraft
  jsch
  0.1.54

增加配置

sftp:
  ip: 192.168.1.60
  port: 22
  timeout: 60000
  retryTime: 3
  admin:
    username: admin
    password: 2k3xrYjbd930.

代码示例

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

@Service
public class SftpTask extends Thread {
  private ChannelSftp sftp;
  private Session session;
  @Value("${sftp.admin.username}")
  private String username;
  @Value("${sftp.admin.password}")
  private String password;
  @Value("${sftp.host}")
  private String host;
  @Value("${sftp.port}")
  private Integer port;
  private SftpService sftpService;
  public EtlSftpTask (SftpService sftpService) {
    this.sftpService = sftpService;
  }
  /**
   * 建立sftp连接
   */
  private void connect(){
    try {
      JSch jSch = new JSch();
      session = jSch.getSession(username, host, port);
      session.setPassword(password);
      session.setConfig("StrictHostKeyChecking", "no");
      session.connect();
      Channel channel = session.openChannel("sftp");
      channel.connect();
      sftp = (ChannelSftp) channel;
    }catch (JSchException e) {
      e.printStackTrace();
    }
  }
  /**
   * 关闭sftp连接
   */
  public void close(){
    try {
      if (sftp != null) {
        if (sftp.isConnected()) sftp.disconnect();
      }
      if(session != null){
        if (session.isConnected()) session.disconnect();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * 下载文件到本地
   *
   * @param source          源文件
   * @param target          目标文件
   * @throws SftpException      异常
   * @throws FileNotFoundException  异常
   */
  private void download(String source, String target) throws SftpException, FileNotFoundException {
    sftp.get(source, new FileOutputStream(new File(target)));
  }
  /**
   * 处理用户数据文件
   *
   * @param root   数据文件根目录
   * @param lastTime 上次处理文件的最后的时间
   * @return     本次处理文件的最后的时间
   */
  private Integer handle(String root, Integer lastTime) {
    String directory = root + "/event/";
    Vector files;
    try {
      files = sftp.ls(directory + "event_*.csv");
    } catch (Exception e) {
      e.printStackTrace();
      return 0;
    }
    // 文件名
    String fileName;
    // 临时文件
    String tmpFile;
    // 文件更新时间
    Integer mTime;
    // 文件最后更新时间
    Integer maxTime = lastTime;
    // 处理用户文件
    for(Object o: files) {
      try {
        ChannelSftp.LsEntry f = (ChannelSftp.LsEntry) o;
        // 文件更新时间
        mTime = f.getAttrs().getMTime();
        if (mTime <= lastTime) continue;
        // 文件名
        fileName = f.getFilename();
        // 最后处理事件
        maxTime = Math.max(maxTime, mTime);
        // 下载文件
        tmpFile = "/tmp/" + fileName;
        download(directory + fileName, tmpFile);
      } catch (Exception e) {
        // TODO 错误日志
        e.printStackTrace();
      }
    }
    // 返回文件最后的处理时间
    return maxTime;
  }
  /**
   * 每天凌晨1点开始执行
   */
  @Scheduled(cron = "0 0 1 * * *")
  public void task () {
    // 获取sftp连接
    connect();
    String root;
    Integer lastTime;
    Long cid;
    Integer maxTime = lastTime;
    // 获取用户列表
    for (SftpDTO sftpDTO: sftpService.findAll()) {
      // 用户主目录
      root = sftpDTO.getSftpRoot();
      // 上次处理文件的最后时间
      lastTime = sftpDTO.getLastTime();
      maxTime = Math.max(maxTime, handle(root, lastTime));
      // 更新最后处理时间
      if (!maxTime.equals(lastTime)) {
        sftpDTO.setLastTime(maxTime);
        sftpService.update(sftpDTO);
      }
    }
    // 释放sftp资源
    close();
  }
}

总结

以上所述是小编给大家介绍的Java使用sftp定时下载文件的示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
author-avatar
技术潜行者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有