有人对大型机数据集使用了ftp.changeWorkingDirectory
命令。存在数据集时,此命令返回true。当没有数据集时,它也会返回true。如果您有用于处理大型机数据集的代码,是否可以共享任何示例Java ftp代码。这是我没有的代码。
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;
}
答案 0 :(得分:1)
在z / OS数据集环境中更改工作目录通常将返回true,除非您指定的限定符太长或整个名称太长。这并不表示工作目录存在或不存在,因为大型机数据集不适用于目录结构。
如果更改到尚不存在的“工作目录”,则会收到以下响应:
250“此工作向导”。是工作目录名称前缀。
如果尝试使用无效的名称,则会得到错误的结果。
501“ THIS.IS.THE.WORKING.DIRECTORY”中的限定词超过8个字符
如果您使用的名称过长,则会出现错误。
501无效的目录名称-太大。
因此,依靠changeWorking Directory中的布尔值将不起作用。您需要使用“ getReplyString()”方法查看回复字符串,然后对其进行解析。
loadlib PDS会说类似 250-工作目录可能是加载库 250工作目录“ GAME.LOADLIB”是一个分区的数据集
非loadlib PDS只会说
250工作目录“ GAME.COBOL”是一个分区的数据集。
listFiles,listDirectories和ListNames也具有不同的行为。
我有许多数据集,分别是GAME.SRCE,GAME.COPYLIB,GAME.LOADLIB和GAME.LOADLIB.PDSE。它们都是分区的数据集。如果将目录更改为GAME并执行listNames(),则将获得全部4。如果使用listFiles或listDirectories,则仅会获得COPYLIB和SRCE。如果将目录更改为GAME.SRCE,则所有三个方法都将列出所有成员。如果将目录更改为GAME.LOADLIB,则只有listNames会列出成员。您也不知道GAME.LOADLIB.PDSE存在。
这是使用Apache Commons,commons-net-3.6.jar和z / OS完成的。
答案 1 :(得分:0)
这是我通过搜索发现的一个简单示例。如果无法更改目录,则应该看到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.");
}