java - 使用 Jscape FTP 获取以 A 或 B 结尾的文件列表

标签 java ftp mvs

我在我的java代码中使用FTP(com.jscape.inet.ftp.Ftp)来获取文件列表。我正在使用以下代码来获取文件列表。

Enumeration<String> files= ftp.getNameListing("test*");

上面的代码列出了所有名称为 test* 的文件。

但是,我在列出所有以 A 或 B 结尾的测试文件时遇到问题。我尝试了以下模式来获取列表。

Enumeration<String> files= ftp.getNameListing("test*[A-B]");
Enumeration<String> files= ftp.getNameListing("test*[AB]");

但是它们都不起作用,并且我收到异常

501 Qualifier too long.  Use MVS naming conventions.
com.jscape.inet.ftp.FtpException: Unable to connect to host **.**.**.**
    at com.jscape.inet.ftp.FtpBaseImplementation.openDataConnection(Unknown Source)
    at com.jscape.inet.ftp.FtpBaseImplementation.getNameListing(Unknown Source)
    at com.jscape.inet.ftp.Ftp.getNameListing(Unknown Source)

感谢任何帮助。

最佳答案

FTP 规范规定文件列表命令(LISTMLSD 等)的参数是路径名。所以无论如何都不应该有通配符。

<小时/>

实际上,许多 FTP 服务器确实支持参数中的通配符。但由于规范不允许这样做,所以显然对于支持的通配符没有设定标准。

vsftpd 支持 *?{} 以及 LIST。 vsftpd 不支持现代 MLSD

proftpd 支持*?[]。但仅适用于LIST。它明确不允许使用带有注释的现代 MLSD 通配符:

RFC3659 explicitly does NOT support glob characters. So warn about this, but let the command continue as is.

pureftpd 支持 *?[] 用于 LISTMLSD

<小时/>

但是您没有使用上述任何 FTP 服务器,而是使用某些 IBM 服务器。我不知道它支持哪种通配符(如果有)。

但一般来说,您根本不应该依赖 FTP 服务器来支持任何通配符。

唯一可靠的方法是检索完整的目录列表并在本地过滤文件。

关于java - 使用 Jscape FTP 获取以 A 或 B 结尾的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28179920/

相关文章:

symfony1 - 如何仅通过 FTP 上传更新外部服务器上的 Symfony 路由?

c - 如何让 ANTLR3.5 在 C 中生成的解析器在 MVS EBCDIC 环境中工作?

java - 如何在 Selenium Webdriver 中使用 java 验证下拉列表的 html 代码中是否存在标签

java - ant 目标,迭代构建路径中具有给定扩展名的所有文件

java - Eclipse 中的 Tomcat : It runs but time out during startup anyway

java - 如何让进度条在recyclerview中不可见

java - 上传文件的FTP服务器

ftp - 有没有办法列出 ftp 中本地目录的内容?