java - 如何使用 Java 列出 SFTP 服务器上的所有文件?

标签 java sftp jsch

我是 SFTP 协议(protocol)的新手。我需要使用 SFTP 协议(protocol)列出服务器中的所有文件和文件夹。我使用 JSch 库实现了这个:

public ArrayList<JSONObject> listFiles(String deviceName, String location) throws Exception
{

    this.sftpLogin();

    Vector fileListVector;
    if (Strings.isNullOrEmpty(location))
    {
        fileListVector = channelSftp.ls("/");
    } else
    {
        fileListVector = channelSftp.ls("/"+location);
    }

    ArrayList<JSONObject> fileList = new ArrayList<>();

    for (Object aFileListVector : fileListVector)
    {
        ChannelSftp.LsEntry entry = (ChannelSftp.LsEntry) aFileListVector;
        if (entry.getFilename().equalsIgnoreCase(".") || entry.getFilename().equalsIgnoreCase(".."))
        {
            continue;
        }
        SftpATTRS attrs = entry.getAttrs();

        fileList.add(ImportProtocolUtils.getFileJSONObject(attrs.isDir(), location, entry.getFilename()));
    }

    return fileList;
}

我尝试使用该协议(protocol)的“shell”和“exec” channel 。但命令“ls”不起作用。

Java 中最好的库是哪个?

提前致谢。

最佳答案

您必须递归到子目录。

类似于:

if (attrs.isDir())
{
    fileList.addAll(listFiles(deviceName, location + "/" + entry.getFilename());
} 

另请参阅Display remote directory/all files in Jtree .

关于java - 如何使用 Java 列出 SFTP 服务器上的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42052208/

相关文章:

java - shell 提示使用 jsch 触发多个命令

java - Liferay 门户的问题与解答 portlet

c# - SFTP 连接 DNS 问题 - System.Net.Sockets.SocketException : The requested name is valid, 但未找到请求类型的数据

java - JSch 算法协商失败

c# - 使用 ssh.net 在 ubuntu 服务器上的文件末尾写入

java - 以创建时的相同顺序从 ssh 命令记录 stdout 和 stderr

java - 是否可以将 ControlMaster 添加到 JSch 连接?

java - 如何删除 Java 中的代理字符?

java - 如何从 java 类中获取 scala 中定义的对象中的特征类?

java - 在eclipse tomcat服务器中启用https不允许调用端口8080