我正在使用JSCH从SFTP服务器下载文件。 我正在使用单个会话,有多个通道从SFTP中的不同文件夹下载文件。 对于这个下载过程,我有一组预定的工作。每份工作都会 1)每次打开一个新频道(ChannelSftp)。频道名称:sftp 2)使用命令 ls 来获取要下载的文件总数的大小 3)如果size(Vector)大于零,则使用 get(remotedir /'。',localdir)下载所有文件 4)最后关闭打开的频道。
在上述过程中,大部分时间我都没有找到文件或没有这样的文件例外,也没有下载某些文件。
任何人都可以建议我为什么会这样。可能是什么原因。如何解决这个问题
下面是我正在使用的代码
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);
}
答案 0 :(得分:0)
没有您的代码,很难诊断出问题。我建议忘记矢量大小检查,只需遍历矢量列表并计算抓取的文件数。以下是我用来检查和下载远程主机文件的代码块:
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");
}