我编写了一个使用JSch ChannelSftp.ls()
递归列出子目录及其文件的方法。它一直工作,直到将一个?
的目录添加到SFTP服务器。由于?
是一个glob模式,因此JSch不能像我想的那样工作。我花了一些时间研究,但似乎根本不可能获得带有问号的目录的信息(或*出于同样的原因)。 Here's a post sharing the exact same problem as I have.
有没有人有同样的问题并解决了?现在,我所能做的就是替换目录名称。
答案 0 :(得分:2)
实际上,当您指定包含*
或?
的最后一个组件的路径时,如:
/actual/path/with/question?mark
... JSch认为最后一个组件是文件的过滤器/模式。它剥离最后一个组件,列出路径/actual/path/with
,然后仅将列出的文件过滤到匹配question?mark
的文件(通常只返回一个条目,对于子文件夹本身而不是子文件夹内容)。
要解决此问题,只需将另一个模式(*
)添加到路径中,如:
/actual/path/with/question?mark/*
它使JSch列出路径/actual/path/with/question?mark
,然后将列出的文件过滤到匹配*
的那些文件(这些文件都是这些文件)。