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

标签 java ssh sftp jsch

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

我写的代码(引用自 SFTP Read all files in directory ):

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。

谢谢

最佳答案

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

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);
            }
        }
    }
}

关于java - 在 Java 中使用 JSch 列出 SFTP 服务器上目录的完整层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652526/

相关文章:

java - rx-java 中的套接字看门狗

Java 数组计数器

Windows 上的 Git/ssh 问题 (git bash)

java - 将文件复制到 SFTP 服务器的 Jsch 示例

linux - Azure VM 中的 SFTP RSA 身份验证

java - Tomcat 6.0.36 没有报告为什么它以 400 响应

java - 在java中上传时如何在aws s3对象中设置缓存控制?

mercurial - 推送到远程 Mercurial 存储库

apache - 由于 DOS 攻击而无法访问 Plesk Admin,通过 SSH 阻止 IP 地址?

java - 当还必须切换用户时使用 JSch 到 SFTP