2015-01-27 2 views
0

내 Java 코드에서 FTP (com.jscape.inet.ftp.Ftp)를 사용하여 파일 목록을 가져옵니다. 파일 목록을 얻으려면 다음 코드를 사용하고 있습니다.Jscape FTP를 사용하여 A 또는 B로 끝나는 파일 목록 가져 오기

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

위 코드는 test * name을 가진 모든 파일을 나열합니다.

그러나 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는

명시 적으로 glob 문자를 지원하지 않습니다 : MLSD 코멘트와 함께 허용하지 않습니다. 따라서 에 대해 경고하지만 명령을 그대로 두십시오.

pureftpdLISTMLSD 모두 *, ?[]을 지원합니다.


위의 FTP 서버를 사용하는 것이 아니라 일부 IBM 서버를 사용하고 있습니다. 어떤 종류의 와일드 카드 (있는 경우)가 지원되는지는 알 수 없습니다.

그러나 일반적으로 와일드 카드를 지원하기 위해 FTP 서버에 의존해서는 안됩니다.

신뢰할 수있는 유일한 방법은 전체 디렉터리 목록을 검색하고 파일을 로컬로 필터링하는 것입니다.

1

연결하려는 FTP 서버가 사용자가 지정한 파일 이름 와일드 카드를 허용하지 않습니다. FTP 파일 목록 명령은 잘 정의되어 있지 않습니다. 여기 RFC 959이 프로토콜 명령에 대한 말씀입니다 :

LIST (LIST)
이 명령은 수동 DTP 서버로부터 전송되는 목록을 발생합니다. 경로명이 디렉토리 또는 기타 파일 그룹을 지정하면 서버는 지정된 디렉토리에 파일 목록을 전송해야합니다. 경로명이 파일을 지정하면 서버는 파일에 대한 최신 정보를 보내야합니다. null 인수는 사용자의 현재 작업 디렉토리 또는 기본 디렉토리를 의미합니다. 데이터 전송은 ASCII 형식 또는 EBCDIC 형식의 데이터 연결을 통해 이루어집니다. (사용자는 이어야 TYPE이 적절하게 ASCII 또는 EBCDIC인지 확인해야합니다). 파일에 대한 정보가 시스템 에서 시스템으로 광범위하게 다를 수 있으므로이 정보는 프로그램에서 자동으로 사용하기가 어려울 수 있지만 사람에게는 매우 유용 할 수 있습니다.

이름 목록 (NLST)
이 명령을 실행하면 서버에서 사용자 사이트로 디렉터리 목록이 전송됩니다. 경로 이름은 디렉토리 또는 기타 시스템 특정 파일 그룹 설명자를 지정해야합니다. a null 인수는 현재 디렉토리를 의미합니다. 서버 은 파일 이름 스트림을 반환하며 다른 정보는 이 아닙니다. 데이터는 ASCII 또는 EBCDIC 유형의 데이터 연결을 통해 유효한 경로 이름 또는로 구분됩니다. 다시 사용자는 을 입력해야 TYPE이 올바른지 확인해야합니다.이 명령은 에서 파일을 자동으로 처리하기 위해 프로그램에서 사용할 수있는 정보를 반환하기 위해 을 사용합니다. 예를 들어 에서 "다중 가져 오기"기능을 구현합니다.

클라이언트에서 보낼 수있는 와일드 카드 또는 서버에서 해석 할 수있는 방법에 대한 설명이 전혀없는 것을 알 수 있습니다. 그 지역에는 단순히 표준이 없기 때문입니다.유닉스 ftp 서버는 유닉스와 같은 와일드 카드와 함께 유닉스 ls 명령과 같은 파일 목록을 구현하지만, 이는 꼭 필요한 동작은 아닙니다.

원격 FTP 서버에 대한 설명서를 확인하거나 원격 시스템 관리자에게 문의하십시오. 찾으려는 파일 목록을 어떻게 요청해야하는지 확인하십시오.

관련 문제