I am using jsch to download files from server, my code below.
public static void downloadFile(TpcCredentialsDTO dto) {
logger.trace("Entering downloadFile() method");
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
boolean success = false;
try {
JSch jsch = new JSch();
session = jsch.getSession(dto.getUsername(), dto.getHost(),
dto.getPort());
session.setPassword(dto.getPassword());
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
logger.info("Connected to " + dto.getHost() + ".");
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
List<String> filesToDownload = getFilesToDownload(dto,channelSftp);
if (!filesToDownload.isEmpty()) {
for (String fileDownloadName : filesToDownload) {
success = false;
OutputStream output = new FileOutputStream(
"C:\Download\BLT_03112012");
channelSftp.get("BLT_03112012",output);
success = true;
if (success)
logger.info(ServerConstants.DOWNLOAD_SUCCESS_MSG
+ fileDownloadName);
output.close();
}
}else {
logger.info(ServerConstants.NO_FILES_TO_DOWNLOAD
+ ServerUtils.getDateTime());
success = true;
}
} catch (JSchException ex) {
logger.error( ServerConstants.SFTP_REFUSED_CONNECTION, ex);
} catch (SftpException ex) {
logger.error(ServerConstants.FILE_DOWNLOAD_FAILED, ex);
} catch (IOException ex) {
logger.error(ServerConstants.FILE_NOT_FOUND, ex);
}catch (Exception ex) {
logger.error(ServerConstants.ERROR, ex);
}finally {
if (channelSftp.isConnected()) {
try {
session.disconnect();
channel.disconnect();
channelSftp.quit();
logger.info( ServerConstants.FTP_DISCONNECT);
} catch (Exception ioe) {
logger.error(ServerConstants.FTP_NOT_DISCONNECT, ioe);
}
}
}
logger.trace("Exiting downloadFile() method");
}
sftpChannel.get(filename, outputstream) is throwing an error.
2: File not found at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2629) at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:977) at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:946) at com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:924) at za.co.tpc.sftpserver.SftpConnection.downloadFile(SftpConnection.java:72) at za.co.tpc.server.execute.FtpMtn.main(FtpMtn.java:44)
The same code does download Text Document file types but fails for 'File' filetype
I fixed in this way:
Where remotePath is the remote SFTP folder name.
Try using paths instead of stream:
EDIT if you wanna use FILE and streams check this example:
http://kodehelp.com/java-program-for-downloading-file-from-sftp-server/
Please find in the below code sample comprising the file upload and download functionalities. Please pull the relevant details from properties files where ever string marked in lt;sftp.user.namegt;. I am deleting the file once the file is downloaded you can have it as per your requirement.
The event and locale parameters what I have added as part of download functionality is to filter the file(s); you can pass parameters as par you need.
Have placed a check to set proxy which can be used on need basis.