Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ftpClient.listFiles(“路径”)与大型机_Java_Ftp_Mainframe - Fatal编程技术网

Java ftpClient.listFiles(“路径”)与大型机

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上使用文件夹名和文件名进行测试,效果很好 我想知道:

我试图从大型机FTP服务器检索文件, 所以我使用了org.apache.commons.net.ftp.FTPClient方法:

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.**'");