SFTP读取目录中的所有文件

时间:2014-07-08 06:38:16

标签: java sftp jsch

我使用SFTP创建了一个成功的连接com.jcraft.jsch

我还在HostDir下创建了一个目录文件夹,如:channelSftp.mkdir("sftp.test");

现在我想读取主机目录下的所有文件/文件夹名称,我没有看到任何适当的方法或示例。

感谢

2 个答案:

答案 0 :(得分:3)

使用此功能完成..

ChannelSftp sftp = (ChannelSftp) channel;
sftp.cd(hostDir);
Vector<String> files = sftp.ls("*");
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());
        }
        if (true && entry.getAttrs().isDir())
        {
            if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
            {
                ret.add(entry.getFilename());
            }
        }
    }
}
System.out.println(ret);

答案 1 :(得分:1)

虽然接受的答案有效但代码过于复杂并且存在许多问题,主要问题是从StringLsEntry的演员。

这是一个更简单的解决方案,没有晦涩的演员阵容:

List<String> list = new ArrayList<>();

ChannelSftp sftp = (ChannelSftp) channel;
Vector<LsEntry> files = sftp.ls(path);
for (LsEntry entry : files)
{
    if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
    {
        list.add(entry.getFilename());
    }
}

System.out.println(list);

如果要递归列出文件(包括子目录中的文件),请参阅:
List complete hierarchy of a directories at SFTP server using JSch in Java