【问题标题】:SFTP Read all files in directorySFTP 读取目录中的所有文件
【发布时间】:2018-04-05 14:52:59
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: java sftp jsch


    【解决方案1】:

    使用这个..完成它..

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

    【讨论】:

      【解决方案2】:

      虽然接受的答案有效,但代码过于复杂并且存在许多问题,主要问题是从String 转换为LsEntry

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

      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

      【讨论】:

        猜你喜欢
        • 2013-12-02
        • 2018-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 2014-11-10
        • 2013-02-28
        • 2015-07-08
        相关资源
        最近更新 更多