我想使用 JSch 在远程位置显示目录的完整层次结构。该位置有多个文件夹,一个文件夹可能有也可能没有文件。
我写的代码(参考SFTP 读取目录中的所有文件):
sftpChannel.cd(remotePath);
Vector<String> files = sftpChannel.ls("*");
List<String> 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。
Thanks
只需实现一个迭代到子目录的递归函数,例如:
public static void listDirectory(
ChannelSftp channelSftp, String path, List<String> list) throws SftpException
{
Vector<LsEntry> 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);
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)