使用javaftp检查mainfame上是否存在数据集



是否有人将ftp.changeWorkingDirectory命令用于大型机数据集。当存在数据集时,此命令返回true。当没有数据集时,它也会返回true。如果您有任何用于处理大型机数据集的示例javaftp代码,您可以共享这些代码吗。这是我的代码,它不起作用。

public static FTPFile[] GetListOfMembersFromPDS(String pdsname, String serverN) {
FTPSClient ftp = FTPConnect(serverN);
FTPFile[] files = null;
boolean success = false;
try {
success = ftp.changeWorkingDirectory(pdsname);
if (!success) {
throw new IOException("Unable to change working directory to " + pdsname
+ " for ftp transfer with ftp client = " + ftp + ". " + ftp.getReplyString());
}
} catch (IOException e) {
e.printStackTrace();`enter code here`
}
System.out.println(success);
try {
files = ftp.listFiles();
} catch (IOException e) {
e.printStackTrace();
}
return files;
} 

在z/OS数据集环境中更改工作目录通常会返回true,除非指定的限定符太长或整个名称太长。这并不意味着工作目录是否存在,因为大型机数据集不在目录结构上工作。

如果您更改为一个还不存在的"工作目录",您将得到以下响应:

250"THIS.IS.WORKING.DIRECTOR."是工作目录名称前缀。

如果你尝试使用一个无效的名称,你会得到错误的结果。

501"THIS.IS.THE.WORKING.DIRECTORY"中的限定符超过8个字符

如果你尝试使用一个太长的名称,你会得到错误的。

501无效的目录名-太大。

因此,依赖changeWorking Directory中的布尔值是行不通的。您需要使用"getReplyString()"方法查看回复字符串,然后对其进行解析

loadlib PDS会显示类似的内容250工作目录可以是加载库250工作目录"GAME.LOADLIB"是一个分区数据集

非loadlib PDS只会说

250工作目录"GAME.CBOL"是一个分区的数据集。

listFiles、listDirectories和ListNames也有不同的行为。

我有很多数据集,分别是GAM.SRCE、GAM.COPYLIB、GAM.LOADLIB和GAM.LOADLIB.PDSE。它们都是分区数据集。如果您将目录更改为GAME,并执行listNames()操作,您将获得全部4个。如果您列出文件或目录,则只能得到COPYLIB和SRCE。如果将目录更改为GAME.SRCE,则所有三种方法都将列出所有成员。如果将目录更改为GAME.LOADLIB,则ONLY listNames将列出成员。您也不知道GAME.LOADLIB.PDSE的存在。

这是使用ApacheCommons、Commons-net-3.6.jar和z/OS完成的。

下面是我通过搜索找到的一个简单示例。如果目录不能更改,您应该看到success=false:

// Change working directory
success = ftp.changeWorkingDirectory(pdsname);
String[] replies = ftp.getReplyStrings();
if (replies != null && replies.length > 0) {
for (String aReply : replies) {
System.out.println("SERVER: " + aReply);
}
}
if (success) {
System.out.println("Successfully changed working directory.");
} else {
System.out.println("Failed to change working directory to " + pdsname + ". See server's reply.");
}

最新更新