检查Mainframe FTP服务器上的路径是文件还是文件夹。

4

我有一段Java代码,它可以从Mainframe上的FTP传输文件到我的本地系统。问题是如何判断给定的路径是文件还是文件夹?我不能通过检查文件扩展名来判断,因为我不知道可能的扩展名。此外,以下代码始终返回false:

 fileSystem.isFile("fileName");

作为主机文件系统,路径使用 . 分隔而不是 / ,因此在结尾处检查 . 也无效。

同样,我使用输入路径从流数据传输到输出位置。

url="connection url of the mainframe"
bufferedInputStream = new BufferedInputStream(url.getInputStream());

当我有源路径中的文件时,它会将文件内容写入目标路径。当源路径有一个目录时,它会将该目录下的文件名和其他属性写入目标路径。
当源路径为目录时,示例输出如下:
Name    VV.MM   Created       Changed          Size  Init    Mod    Id
QQQQ    01.00  2009/12/18   2009/12/18 12:15    18    18     0    XXXX 
RRRR    01.00  2009/12/18   2009/12/18 12:16     19     19    0  XXXXX

我该如何确定源路径是文件还是文件夹?

2
实际上这可能不是一个重复的问题,无论是确切的还是其他方面。有两个主机文件系统,即“Unix文件系统”和“经典文件系统”。前者的行为类似于“正常”的Unix。后者没有目录。在FTP启动任务中有一些语法糖,使它看起来像你可以更改目录,但实际上你只是修改用于子集化你所看到或创建的数据集的限定符。 - cschneid
3
同意。 "主机" 标签可以阻止重复问题。对于在 z/OS 服务器上工作的 FTP 用户来说,这是一个严重的问题。我已经投票支持重新开放该问题,并请求所有其他关注此问题的主机用户也一起点赞。 - zarchasmpgmr
感谢 @cschneid 和 @zarchasmpgmr。 - RadAl
3个回答

2

我没有答案,但听起来你正在访问Zos。对于那些不知道Zos的人

  • Zos没有目录
  • 他所说的目录可能是PDS(请参见数据集中的PDS)。对于不来自主机背景的人来说,可以将其视为一种存档类型(即jar、Tar、zip等)。这不是完全准确的描述,PDS具有某些限制和用途,而jar文件则是我能想到的在PC、*NIX世界中最接近的类比。

  • 如何检测它们-不确定,可能有一个文件属性可以访问


z/OS绝对有目录。看看z/OS Unix系统服务。顺便说一句,z/OS v1r2及更高版本符合Unix95产品标准:http://www.opengroup.org/openbrand/register/ibm.htm。话虽如此,当你说“他所谓的目录可能是一个PDS[...]”时,你是正确的,你的比喻也很好。 - cschneid
cschneid,是的,您说得对,我往往会忘记Unix System Services——从未使用过它们,也不知道Clasic-MVS/ZOS结构如何映射到ZOs的Unix侧面。此外,问题非常经典——MVS/ZOS。另外一个问题,在Java中如何使用jar文件,它总是让我想起在主机上如何使用load-libraries——又一例旧事重提。 - Bruce Martin

1
我找到了一种方法来确定主机路径是文件还是PDS(类似于目录)。我使用了org.apache.hadoop.fs.ftp.FTPFileSystem库,以下代码片段将返回文件列表。
FTPFile[] files = ftp.listFiles(); 

通过循环遍历files并检查file1.isFile()即可。再次记得在列出文件之前更改为当前工作目录,使用ftp.cwd(inputPath);

有关主机文件系统的说明,请参阅Bruce Martin的答案和随后的评论。


0

您没有说明您使用的Java版本,或者是否使用了特殊的主机文件系统库。

您可以使用java.io.File#isDirectory()吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接