java - 使用jsch从SFTP下载文件

  显示原文与译文双语对照的内容

我正在使用JSCH从SFTP服务器下载文件。 我使用的是单个会话,有多个通道可以从位于SFTP中的不同文件夹下载文件。 对于这个下载过程,我有一组调度作业。 每个工作将 1 ) 每次打开一个新的channel(ChannelSftp) 。 channel: sftp使用命令 ls获取下载的总文件数( 如果 size(Vector) 大于0,则使用获取( remotedir/') 。 下载所有文件 4',localdir ) ) 打开打开的通道。

在上面的过程中,大部分时候我得到文件没有找到或者没有这样的文件异常,没有下载一些文件。

谁能告诉我为什么会发生这种情况。 原因是什么。 如何解决这里问题

下面是我正在使用的代码


ChannelSftp channelSftp = null;
try {

channelSftp = getChannelConnectionUtil().openChannel();//SFTPConnection.getSession().openChannel("sftp"); 
@SuppressWarnings("rawtypes")
Vector numOfFiles = channelSftp.ls(ftpDir+"/*.*");

if(numOfFiles.size()> 0){
 channelSftp.get(ftpDir+"/*.*",localDir);//Here I am getting error
}
} catch (Exception e) {
e.printStackTrace();
 }
 finally {
 getChannelConnectionUtil().disconnectChannel(channelSftp);
 }

时间: 原作者:

如果没有你的代码,就很难诊断问题。 我建议忘记向量大小检查,只需循环遍历矢量列表并计算所获取的文件数。 下面是我用来检查和从远程主机下载文件的代码块:


try { 
 ChannelSftp c = (ChannelSftp) channel; 
 c.lcd(localDir);
 logger.info("lcd" + c.lpwd());

//Get a listing of the remote directory
 @SuppressWarnings("unchecked")
 Vector<ChannelSftp.LsEntry> list = c.ls("."); 
 logger.info("ls.");

//iterate through objects in list, identifying specific file names
 for (ChannelSftp.LsEntry oListItem : list) {
//output each item from directory listing for logs
 logger.info(oListItem.toString()); 

//If it is a file (not a directory)
 if (!oListItem.getAttrs().isDir()) {
//Grab the remote file ([remote filename], [local path/filename to write file to])

 logger.info("get" + oListItem.getFilename());
 c.get(oListItem.getFilename(), oListItem.getFilename());//while testing, disable this or all of your test files will be grabbed

 grabCount++; 

//Delete remote file
//c.rm(oListItem.getFilename());//Deleting remote files is not requried in every situation.
 }
 }

//Report files grabbed to log
 if (grabCount == 0) { 
 logger.info("Found no new files to grab.");
 } else {
 logger.info("Retrieved" + grabCount +" new files.");
 } 
} catch(SftpException e) {
 logger.warning(e.toString());
} finally {
//disconnect session. If this is not done, the job will hang and leave log files locked
 session.disconnect();
 logger.info("Session Closed");
}

原作者:
...