我想使用JSCH从FTP服务器下载所有文件。
以下是代码段
List<File> fileList = null;
Vector<ChannelSftp.LsEntry> list = sftpChannel.ls(remoteFolder);
for (ChannelSftp.LsEntry file : list) {
if( getLog().isDebugEnabled() ){
getLog().debug("Retrieved Files from the folder is"+file);
}
if (!(new File(file.getFilename())).isFile()) {
continue;
}
fileList.add(new File(remoteFolder,file.getFilename())) ;
return fileList;
该方法将返回List,以便使用sftpChannel.get(src,dest)从远程服务器下载文件的另一种方法;
如果代码合适,请告诉我。 我没有测试环境,所以无法确认。 但是我为FTPClient编写的代码有些类似,但它确实有用。
感谢您的帮助。
答案 0 :(得分:0)
您可以使用SftpATTRS获取文件信息。您可以声明一个包装类来存储文件信息。示例如下所示。
private class SFTPFile
{
private SftpATTRS sftpAttributes;
public SFTPFile(LsEntry lsEntry)
{
this.sftpAttributes = lsEntry.getAttrs();
}
public boolean isFile()
{
return (!sftpAttributes.isDir() && !sftpAttributes.isLink());
}
}
现在您可以使用此类来测试LsEntry是否为文件
private List<SFTPFile> getFiles(String path)
{
List<SFTPFile> files = null;
try
{
List<?> lsEntries = sftpChannel.ls(path);
if (lsEntries != null)
{
files = new ArrayList<SFTPFile>();
for (int i = 0; i < lsEntries.size(); i++)
{
Object next = lsEntries.get(i);
if (!(next instanceof LsEntry))
{
// throw exception
}
SFTPFile sftpFile = new SFTPFile((LsEntry) next);
if (sftpFile.isFile())
{
files.add(sftpFile);
}
}
}
}
catch (SftpException sftpException)
{
//
}
return files;
}
现在你可以使用sftpChannel.get(src,dest);下载文件。