Java Jsch SFTP 递归下载文件夹
Java Program For Downloading Folder Content recursively from SFTP Server
How to download folder from SFTP Server (Secure File Transfer Protocol) is the common use case for Java developer who wants to download folder from SFTP. To write a java program to download from SFTP, you will need to download JSCH jar file.
For other SFTP operations in java, please refer below posts on Kodehelp.com –
Download File from SFTP Server.
Upload File to SFTP Server.
Get list of files from SFTP directory.
Below Java program is for downloading folder/directory content recursively from SFTP server.
/**
* Created on Dec 27, 2016 Copyright(c) http://kodehelp.com All Rights Reserved.
*/
package com.kodehelp.sftp;
import java.io.File;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
/**
* @author http://kodehelp.com
*
*/
public class DownloadRecursiveFolderFromSFTP {
static ChannelSftp channelSftp = null;
static Session session = null;
static Channel channel = null;
static String PATHSEPARATOR = "/";
/**
* @param args
*/
public static void main(String[] args) {
String SFTPHOST = "10.20.30.40"; // SFTP Host Name or SFTP Host IP Address
int SFTPPORT = 22; // SFTP Port Number
String SFTPUSER = "SFTPUserName"; // User Name
String SFTPPASS = "SFTPPassword"; // Password
String SFTPWORKINGDIR = "/home/kodehelp/download"; // Source Directory on SFTP server
String LOCALDIRECTORY = "C:\\temp"; // Local Target Directory
try {
JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(); // Create SFTP Session
channel = session.openChannel("sftp"); // Open SFTP Channel
channel.connect();
channelSftp = (ChannelSftp) channel;
channelSftp.cd(SFTPWORKINGDIR); // Change Directory on SFTP Server
recursiveFolderDownload(SFTPWORKINGDIR, LOCALDIRECTORY); // Recursive folder content download from SFTP server
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (channelSftp != null)
channelSftp.disconnect();
if (channel != null)
channel.disconnect();
if (session != null)
session.disconnect();
}
}
/**
* This method is called recursively to download the folder content from SFTP server
*
* @param sourcePath
* @param destinationPath
* @throws SftpException
*/
@SuppressWarnings("unchecked")
private static void recursiveFolderDownload(String sourcePath, String destinationPath) throws SftpException {
Vector<ChannelSftp.LsEntry> fileAndFolderList = channelSftp.ls(sourcePath); // Let list of folder content
//Iterate through list of folder content
for (ChannelSftp.LsEntry item : fileAndFolderList) {
if (!item.getAttrs().isDir()) { // Check if it is a file (not a directory).
if (!(new File(destinationPath + PATHSEPARATOR + item.getFilename())).exists()
|| (item.getAttrs().getMTime() > Long
.valueOf(new File(destinationPath + PATHSEPARATOR + item.getFilename()).lastModified()
/ (long) 1000)
.intValue())) { // Download only if changed later.
new File(destinationPath + PATHSEPARATOR + item.getFilename());
channelSftp.get(sourcePath + PATHSEPARATOR + item.getFilename(),
destinationPath + PATHSEPARATOR + item.getFilename()); // Download file from source (source filename, destination filename).
}
} else if (!(".".equals(item.getFilename()) || "..".equals(item.getFilename()))) {
new File(destinationPath + PATHSEPARATOR + item.getFilename()).mkdirs(); // Empty folder copy.
recursiveFolderDownload(sourcePath + PATHSEPARATOR + item.getFilename(),
destinationPath + PATHSEPARATOR + item.getFilename()); // Enter found folder on server to read its contents and create locally.
}
}
}
}
https://kodehelp.com/java-program-downloading-directory-folder-content-recursively-sftp-server
Java Jsch SFTP 递归下载文件夹的更多相关文章
- java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数
File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...
- 使用python ftplib包递归下载文件夹及文件
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2018-06-11 09:35:49 # @Author : Yaheng Wang ...
- Java File类应用:递归遍历文件夹和递归删除文件
要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...
- AWS S3 递归上传文件和递归下载文件, 以及S3之间拷贝文件夹
1. 递归上传文件: aws s3 cp 本地文件夹 s3://bucket-name -- recursive --region us-east-1 2. 递归下载S3上的文件夹: cd 本地下载 ...
- 使用java API进行zip递归压缩文件夹以及解压
一.概述 在本篇文章中,给大家介绍一下如何将文件进行zip压缩以及如何对zip包解压.所有这些都是使用Java提供的核心库java.util.zip来实现的. 二.压缩文件 首先我们来学习一个简单的例 ...
- java递归删除文件夹
递归删除文件夹 public static void delete(File file) { if(!file.exists()){ return; } if(file.isFile() || fil ...
- JAVA删除某个文件夹(递归删除文件夹的所有文件)
/** * 递归删除文件夹下所有内容 最后删除该文件夹 * @param filePath 要删除的文件夹路径 * @return */ public boolean deleteFiles(Stri ...
- C#- FTP递归下载文件
c# ftp递归下载文件,找来找去这个最好.(打断点,一小处foreach要改成for) /// <summary> /// ftp文件上传.下载操作类 /// </summary& ...
- JAVA中比较两个文件夹不同的方法
JAVA中比较两个文件夹不同的方法,可以通过两步来完成,首先遍历获取到文件夹下的所有文件夹和文件,再通过文件路径和文件的MD5值来判断文件的异同.具体例子如下: public class TestFo ...
随机推荐
- TCP如何保证可靠传输(转)
TCP协议传输的特点主要就是面向字节流.传输可靠.面向连接.这篇博客,我们就重点讨论一下TCP协议如何确保传输的可靠性的. 确保传输可靠性的方式TCP协议保证数据传输可靠性的方式主要有: 校验和 序列 ...
- vue之scoped穿透
vue之scoped穿透 问题:在页面中,需要了第三方插件的样式,又不想取消scoped,防止造成样式污染 方法:>>> 代码: #tab >>> .ivu-tab ...
- Sql Server 导出数据库表结构的SQL查询语句
--导出数据库所有表 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.colo ...
- ubuntu - 14.04,安装docker(源代码管理工具)
一,安装docker: 1,安装curl:在shell中执行:sudo apt-get install curl 2,shell中执行:curl -sSL https://get.daocloud.i ...
- 【异常】553 Mail from must equal authorized user
1 详细异常打印 2019-08-12 14:54:42,178 ERROR org.apache.camel.processor.DefaultErrorHandler: Failed delive ...
- shell脚本基础和grep文本处理工具企业应用3
文本处理工具: linux上文本处理三剑客 grep,egrep,fgrep:文本过滤工具(模式:pattern)工具 grep:默认支持的是基本正则表达式: ...
- 如何用eclipse进行jar文件打包?
直接导出runnable jar,如下图所示: 然后选择导出runnable jar: 关于library handling部分的解释如下: (1)Extract required libraries ...
- 09-sp_lock和sys.dm_tran_locks的用法
一.总结 1.网址 https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-lock ...
- CSS3 box-sizing:content-box | border-box
box-sizing:content-box | border-box 默认值:content-box 适用于:所有接受width和height的元素 继承性:无 content-box: paddi ...
- 交换机配置——跨交换机划分VLAN配置
一.实验要求:实现跨交换地划分vlan的配置任务,使同一vlan下的主机能相互通讯 二.拓扑图如下; 三.具体实验步骤: S1交换机配置: S1>enable --进入特权模式S1#confi ...