欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用sftp定時下載文件的示例代碼

 更新時間:2018年05月17日 16:28:15   作者:tianshl  
SFTP 為 SSH的其中一部分,是一種傳輸檔案至 Blogger 伺服器的安全方式。接下來通過本文給大家介紹了Java使用sftp定時下載文件的示例代碼,感興趣的朋友跟隨腳本之家小編一起看看吧

sftp簡介

sftp是Secure File Transfer Protocol的縮寫,安全文件傳送協(xié)議??梢詾閭鬏斘募峁┮环N安全的網(wǎng)絡的加密方法。sftp 與 ftp 有著幾乎一樣的語法和功能。SFTP 為 SSH的其中一部分,是一種傳輸檔案至 Blogger 伺服器的安全方式。其實在SSH軟件包中,已經(jīng)包含了一個叫作SFTP(Secure File Transfer Protocol)的安全文件信息傳輸子系統(tǒng),SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接和答復操作,所以從某種意義上來說,SFTP并不像一個服務器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認證信息和傳輸?shù)臄?shù)據(jù),所以,使用SFTP是非常安全的。但是,由于這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網(wǎng)絡安全性要求更高時,可以使用SFTP代替FTP。

添加依賴

<dependency>
  <groupId>com.jcraft</groupId>
  <artifactId>jsch</artifactId>
  <version>0.1.54</version>
</dependency>

增加配置

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)));
  }
  /**
   * 處理用戶數(shù)據(jù)文件
   *
   * @param root   數(shù)據(jù)文件根目錄
   * @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點開始執(zhí)行
   */
  @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定時下載文件的示例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • Java servlet通過事件驅動進行高性能長輪詢詳解

    Java servlet通過事件驅動進行高性能長輪詢詳解

    這篇文章主要介紹了基于servlet3.0+事件驅動實現(xiàn)高性能長輪詢的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2022-06-06
  • Java實現(xiàn)公用實體類轉Tree結構

    Java實現(xiàn)公用實體類轉Tree結構

    這篇文章主要為大家介紹了一個Java工具類,可以實現(xiàn)Java公用實體類轉Tree結構,文中的示例代碼簡潔易懂,感興趣的小伙伴可以參考一下
    2024-10-10
  • springMVC配置環(huán)境實現(xiàn)文件上傳和下載

    springMVC配置環(huán)境實現(xiàn)文件上傳和下載

    這篇文章主要為大家詳細介紹了springMVC配置環(huán)境實現(xiàn)文件上傳和下載的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • springmvc path請求映射到bean 方法的流程

    springmvc path請求映射到bean 方法的流程

    這篇文章主要介紹了springmvc path請求映射到bean 方法的流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 使用import導入靜態(tài)成員的方法

    使用import導入靜態(tài)成員的方法

    這篇文章主要介紹了淺談使用import導入靜態(tài)成員,需要的朋友可以參考下。
    2017-09-09
  • IDEA利用jclasslib 修改class文件的實現(xiàn)

    IDEA利用jclasslib 修改class文件的實現(xiàn)

    這篇文章主要介紹了IDEA利用jclasslib 修改class文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Lombok的詳細使用及優(yōu)缺點總結

    Lombok的詳細使用及優(yōu)缺點總結

    最近在學Mybatis,接觸到了Lombok的使用,所以寫一篇文章記錄一下,包括lombok的安裝及使用優(yōu)缺點,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • ibatis遷移到mybatis3的注意事項

    ibatis遷移到mybatis3的注意事項

    這篇文章主要介紹了ibatis遷移到mybatis3的注意事項的相關資料,需要的朋友可以參考下
    2017-10-10
  • 關于Long和Integer相互轉換方式

    關于Long和Integer相互轉換方式

    這篇文章主要介紹了關于Long和Integer相互轉換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot使用注解進行分頁的實現(xiàn)示例

    SpringBoot使用注解進行分頁的實現(xiàn)示例

    分頁使用可以說非常普遍了,有時候會需要非常靈活的方式去開啟或關閉分頁,嘗試使用一下注解的方式來進行分頁,本文主要介紹了SpringBoot使用注解進行分頁的實現(xiàn)示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論