2015-01-27 5 views
0

Я использую FTP (com.jscape.inet.ftp.Ftp) в своем java-коде, чтобы получить список файлов. Я использую следующий фрагмент кода для получения списка файлов.Получить список файлов, заканчивающийся на A или B, используя Jscape FTP

Enumeration<String> files= ftp.getNameListing("test*"); 

В приведенном выше коде перечислены все файлы с именем test *.

Однако я столкнулся с проблемой при перечислении всех тестовых файлов, заканчивающихся A или B. Я попробовал шаблон ниже, чтобы получить листинг.

Enumeration<String> files= ftp.getNameListing("test*[A-B]"); 
Enumeration<String> files= ftp.getNameListing("test*[AB]"); 

Однако ни один из них не работают, и я получаю исключение

501 Qualifier too long. Use MVS naming conventions. 
com.jscape.inet.ftp.FtpException: Unable to connect to host **.**.**.** 
    at com.jscape.inet.ftp.FtpBaseImplementation.openDataConnection(Unknown Source) 
    at com.jscape.inet.ftp.FtpBaseImplementation.getNameListing(Unknown Source) 
    at com.jscape.inet.ftp.Ftp.getNameListing(Unknown Source) 

Любая помощь приветствуется.

ответ

1

Спецификация FTP указывает, что аргумент в отношении команд перечисления файлов (LIST, MLSD и т. Д.) - это путь. Поэтому не должно быть никаких подстановочных знаков.


На практике, хотя многие FTP-серверы поддерживают wilcards в аргументе. Но поскольку спецификация не позволяет этого, очевидно, что нет установленного стандарта для поддерживаемых подстановочных знаков.

Vsftpd поддерживает *, ? и {} с LIST. vsftpd не поддерживает современные MLSD.

ProFTPD поддерживает *, ? и []. Но только для LIST. Он явно не допускает использования wilcards с современными MLSD с комментариями:

RFC3659 явно НЕ поддерживает символы глобуса. Поэтому предоставьте об этом , но пусть команда будет продолжена как есть.

PureFTPd поддерживает *, ? и [] для обоих LIST и MLSD.


Но вы не используете ни один из вышеуказанных FTP-серверов, а скорее некоторый сервер IBM. Я понятия не имею, какие подстановочные знаки (если есть) он поддерживает.

Но в общем, вы не должны полагаться на FTP-сервер, чтобы поддерживать любые подстановочные знаки вообще.

Единственный надежный подход - получить полный список каталогов и локально фильтровать файлы.

1

FTP-сервер, с которым вы подключаетесь, не принимает указанный вами подстановочный файл. Команды FTP-файла не очень четко определены. Вот что RFC 959 говорит о командах протокола:

LIST (СПИСОК)
Эта команда вызывает список будет отправлено с сервера на пассивном DTP. Если pathname указывает каталог или другую группу , сервер должен передать список файлов в указанный каталог. Если имя пути указывает файл , тогда сервер должен отправить текущую информацию в файл . Нулевой аргумент подразумевает текущую работу пользователя или по умолчанию. Передача данных осуществляется по данным подключения типа ASCII или типа EBCDIC. (Пользователь должен убедиться, что TYPE соответствует ASCII или EBCDIC). Поскольку информация о файле может сильно различаться от системы к системе, эта информация может быть затруднена в использовании в программе, но может оказаться весьма полезной для пользователя.

NAME LIST (NLST)
Эта команда вызывает отправку каталога с сервера на сайт пользователя. Путь должен указывать каталог или другой системный дескриптор файловой группы; a Нулевой аргумент подразумевает текущий каталог. Сервер вернет поток имен файлов и никакой другой информации . Данные будут переданы в ASCII или типа EBCDIC по соединению данных в качестве допустимого имени пути строк, разделенных или. (Опять же пользователь должен убедиться, что TYPE верен.) Эта команда предназначена для для возврата информации, которая может быть использована программой для , и далее обрабатывать файлы автоматически. Например, в реализована функция «множественного получения».

Вы заметите полное отсутствие каких-либо обсуждений о том, какие шаблоны могут отправлять клиенты или как сервер будет их интерпретировать. Это потому, что в этой области просто нет стандарта.Серверы Unix ftp обычно реализуют список файлов, например, команду unix ls с unix-подобными подстановочными знаками, но это отнюдь не требуется,

Вы должны проверить документацию для удаленного FTP-сервера или поговорить с администраторами удаленной системы, чтобы узнать, как вы должны запросить список файлов, который вы ищете.

Смежные вопросы