Проверьте, существует ли набор данных на mainfame, используя Java FTP - PullRequest
0 голосов
/ 05 февраля 2019

Кто-нибудь использовал команду ftp.changeWorkingDirectory для наборов данных мэйнфреймов.Эта команда возвращает истину, когда есть набор данных.Он также возвращает истину, когда нет набора данных.Можете ли вы поделиться любым примером кода 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 голосов
/ 09 февраля 2019

Изменение рабочего каталога в среде набора данных z / OS обычно возвращает true, если вы не укажете слишком длинный спецификатор или слишком длинное имя.Это не означает, что рабочий каталог существует или нет, так как наборы данных мэйнфреймов не работают в структуре каталогов.

Если вы перейдете к «рабочему каталогу», который еще не существует, вы получите этоОтвет:

250 "ЭТО.ИС. РАБОТА. ДИРЕКТОР."это префикс имени рабочего каталога.

Если вы попытаетесь указать недопустимое имя, вы получите false.

501 Квалификатор в "THIS.IS.THE.WORKING.DIRECTORY"больше 8 символов

Если вы попытаетесь использовать слишком длинное имя, вы получите false.

501 Неверное имя каталога - слишком большое.

Итак, полагаясьна логическое значение из каталога ChangeWorking не будет работать.Вам нужно просмотреть строку ответа с помощью метода "getReplyString ()" и затем проанализировать ее.

PDS loadlib скажет что-то вроде 250 - Рабочий каталог может быть библиотекой загрузки 250 Рабочий каталог«GAME.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.

0 голосов
/ 05 февраля 2019

Вот простой пример, который я нашел, выполнив поиск.Вы должны увидеть 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.");
    }
...