Below code can download/upload from/to sftp server:
package ftp;
import com.jcraft.jsch.*;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.*;
import java.util.Vector;
/**
* Created by pli on 7/16/2015.
*/
@Data
public class SftpService {
private static Logger logger = LoggerFactory.getLogger(SftpService.class);
private String host;
private String username;
private String password;
public void downloadFilesFromSftp(String sftpFromDir, String downloadFileName, String toLocalDir) {
JSch jSch = new JSch();
Session session = null;
Channel channel = null;
try {
session = jSch.getSession(username, host, 22);
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "publickey,password");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp channelSftp;
channelSftp = (ChannelSftp) channel;
channelSftp.cd(sftpFromDir);
Vector<ChannelSftp.LsEntry> list = channelSftp.ls(downloadFileName);
for(ChannelSftp.LsEntry entry : list) {
try {
Path filePath;
filePath = Paths.get(toLocalDir + "/" + entry.getFilename());
Files.copy(channelSftp.get(sftpFromDir + "/" + entry.getFilename()), filePath, StandardCopyOption.REPLACE_EXISTING);
}catch (IOException e){
logger.error("Encountered error when dealing with " + entry.getFilename() + ":" + e.toString());
}
}
} catch (Exception e) {
logger.error(e.getMessage());
}
finally {
if(channel != null ){
channel.disconnect();
}
if(session != null){
session.disconnect();
}
}
}
public void uploadFilesFromSftp(String localFromDir, String uploadFileName, String toSftpDir) {
JSch jSch = new JSch();
Session session = null;
Channel channel = null;
try {
session = jSch.getSession(username, host, 22);
session.setPassword(password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
config.put("PreferredAuthentications", "publickey,password");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp channelSftp;
channelSftp = (ChannelSftp) channel;
DirectoryStream<Path> ds = Files.newDirectoryStream(Paths.get(localFromDir), uploadFileName);
for (Path localFileFrom : ds) {
try {
channelSftp.put(new FileInputStream(new File(localFileFrom.toString())), toSftpDir + "/" + localFileFrom.getFileName());
}catch (IOException e){
logger.error("Encountered error when dealing with " + localFileFrom.toString() + ":" + e.toString());
}
}
} catch (Exception e) {
logger.error(e.getMessage());
}
finally {
if(channel != null ){
channel.disconnect();
}
if(session != null){
session.disconnect();
}
}
}
public static void main(String[] args) {
SftpService sftpServiceDownload = new SftpService();
sftpServiceDownload.setHost("hostname");
sftpServiceDownload.setUsername("username");
sftpServiceDownload.setPassword("password");
sftpServiceDownload.downloadFilesFromSftp("/home", "*.txt", "/home");
SftpService sftpServiceUpload = new SftpService();
sftpServiceUpload.setHost("hostname");
sftpServiceUpload.setUsername("username");
sftpServiceUpload.setPassword("password!ake");
sftpServiceUpload.uploadFilesFromSftp("/home", "*", "/root");
}
}
pom dependency:
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-sftp</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>