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

时间:2019-02-05 19:15:42

标签: java ftp mainframe

有人对大型机数据集使用了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;
} 

2 个答案:

答案 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.");
    }