使用JSch LS方法

时间:2018-03-12 06:36:27

标签: java wildcard sftp jsch

我编写了一个使用JSch ChannelSftp.ls()递归列出子目录及其文件的方法。它一直工作,直到将一个?的目录添加到SFTP服务器。由于?是一个glob模式,因此JSch不能像我想的那样工作。我花了一些时间研究,但似乎根本不可能获得带有问号的目录的信息(或*出于同样的原因)。 Here's a post sharing the exact same problem as I have.

有没有人有同样的问题并解决了?现在,我所能做的就是替换目录名称。

1 个答案:

答案 0 :(得分:2)

实际上,当您指定包含*?的最后一个组件的路径时,如:

/actual/path/with/question?mark

... JSch认为最后一个组件是文件的过滤器/模式。它剥离最后一个组件,列出路径/actual/path/with,然后仅将列出的文件过滤到匹配question?mark的文件(通常只返回一个条目,对于子文件夹本身而不是子文件夹内容)。

要解决此问题,只需将另一个模式(*)添加到路径中,如:

/actual/path/with/question?mark/*

它使JSch列出路径/actual/path/with/question?mark,然后将列出的文件过滤到匹配*的那些文件(这些文件都是这些文件)。