我在我的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 规范规定文件列表命令(LIST
、MLSD
等)的参数是路径名。所以无论如何都不应该有通配符。
实际上,许多 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 支持 *
、?
和 []
用于 LIST
和MLSD
。
但是您没有使用上述任何 FTP 服务器,而是使用某些 IBM 服务器。我不知道它支持哪种通配符(如果有)。
但一般来说,您根本不应该依赖 FTP 服务器来支持任何通配符。
唯一可靠的方法是检索完整的目录列表并在本地过滤文件。
关于java - 使用 Jscape FTP 获取以 A 或 B 结尾的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28179920/