Java ftpClient.listFiles(“路径”)与大型机
我试图从大型机FTP服务器检索文件, 所以我使用了org.apache.commons.net.ftp.FTPClient方法:Java ftpClient.listFiles(“路径”)与大型机,java,ftp,mainframe,Java,Ftp,Mainframe,我试图从大型机FTP服务器检索文件, 所以我使用了org.apache.commons.net.ftp.FTPClient方法: FTPClient ftpClient = ...... ftpClient.listFiles("path") 假设目录是“AAAA.BBBB.CCCC.ddddd”: 当我打印出来的时候 files.length 结果是1。不管是文件还是文件夹,结果仍然是1。我想知道为什么 我在一个常规的、非大型机的ftp上使用文件夹名和文件名进行测试,效果很好 我想知道:
FTPClient ftpClient = ......
ftpClient.listFiles("path")
假设目录是“AAAA.BBBB.CCCC.ddddd”:
当我打印出来的时候
files.length
结果是1。不管是文件还是文件夹,结果仍然是1。我想知道为什么
我在一个常规的、非大型机的ftp上使用文件夹名和文件名进行测试,效果很好
我想知道:
如何在大型机ftp中正确遍历目录
有两个可用的文件系统。一个是“经典”文件系统(我的术语,我不知道IBM有什么不同),它的根源可以追溯到半个世纪前,另一个是更新的,并且兼容 您使用的是“经典”文件系统。没有目录。有时FTP客户机中有语法糖,使数据集名称限定符(点之间的“AAAA”和“BBBB”部分)看起来像目录。他们不是 我建议您在
listFiles
方法的参数中使用通配符。看看“AAAA.BBBB.CCCC.DDDD.*”是否能满足您的期望
您还可以尝试将参数“AAAA.BBBB.CCCC”传递给changeWorkingDirectory
方法
根据您正在使用的库的实现情况,上述任何一项都可能执行与ISPF命令等效的操作。我最近在一个客户的大型机上调查了这个问题,有效的解决方案是首先添加一个具有以下配置的DefaultFTPSSessionFactory:
<bean class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
<property name="host" value="???.???.???.???" />
<property name="port" value="21" />
<property name="username" value="ftp" />
<property name="password" value="ftp" />
<property name="config">
<bean class="org.apache.commons.net.ftp.FTPClientConfig">
<constructor-arg value="MVS" />
</bean>
</property>
</bean>
我们在会话对象上使用的文件模式是“FILE.FILE.FILE.FILE.FILE.*.”(包括单引号)
获取文件列表的java代码是
Session<FTPFile> session = factory.getSession();
FTPFile[] files = session.list("'FILE.FILE.FILE.FILE.FILE.**'");
Session Session=factory.getSession();
FTPFile[]files=session.list(“'FILE.FILE.FILE.FILE.FILE.*'”;
您使用的是哪个FTP库?如果操作系统是ZOS,它实际上没有目录。它确实有PDS,有点像相当有限的zip文件。在大多数情况下,PDS可以像FTP中的目录一样处理,但是会有不同的情况。listFiles与大型机文件系统PDS一起工作吗?谢谢你的回答,为什么你使用**作为通配符,而不是单一*?我会试试看。thanks@RuoboWang**匹配0个或多个附加限定符,a*匹配1个或多个附加限定符。ISPF DSLIST模式匹配不同于正则表达式,也不同于其他OSs通配符匹配。嗨,比尔,我最近在一家客户的大型机上调查了这个问题,工作解决方案是首先添加一个DefaultFtpSessionFactory,配置如下:好,编辑良好。谢谢我们现在可以通过删除注释来澄清。我已经开始了,等我看到你的已经不见了,我就把这个扔掉。
Session<FTPFile> session = factory.getSession();
FTPFile[] files = session.list("'FILE.FILE.FILE.FILE.FILE.**'");