使用Java中的JSch列出SFTP服务器上目录的完整层次结构

我想使用JSch在远程位置显示目录的完整层次结构。 该位置有多个文件夹,文件夹可能有也可能没有文件。

我编写的代码(参考SFTP读取目录中的所有文件 ):

sftpChannel.cd(remotePath); Vector files = sftpChannel.ls("*"); List ret=new ArrayList(); for (int i = 0; i < files.size(); i++) { Object obj = files.elementAt(i); if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry) { LsEntry entry = (LsEntry) obj; if (true && !entry.getAttrs().isDir()) { ret.add(entry.getFilename()+"file"); } if (true && entry.getAttrs().isDir()) { if (!entry.getFilename().equals(".") && !entry.getFilename().equals("..")) { ret.add(entry.getFilename()+"folder"); } } } } System.out.println(ret); 

此代码仅显示顶级文件夹名称,不读取这些文件夹中的文件。

我使用的是jsch-0.1.54。

谢谢

只需实现一个迭代到子目录的递归函数,例如:

 public static void listDirectory( ChannelSftp channelSftp, String path, List list) throws SftpException { Vector files = channelSftp.ls(path); for (LsEntry entry : files) { if (!entry.getAttrs().isDir()) { list.add(path + "/" + entry.getFilename()); } else { if (!entry.getFilename().equals(".") && !entry.getFilename().equals("..")) { listDirectory(channelSftp, path + "/" + entry.getFilename(), list); } } } }