Issue with org.apache.commons.net.ftp.FTPClient listFiles ()

DaslistFiles() Methode vonorg.apache.commons.net.ftp.FTPClient funktioniert gut mit Filezilla-Server auf 127.0.0.1, gibt aber @ zurünull im Stammverzeichnis von öffentlichen FTP-Servern wie belnet.be.

Es gibt eine identische Frage auf dem Link unten, aberenterRemotePassiveMode() scheint nicht zu helfen.Apache Commons FTPClient.listFiles

Könnte es ein Problem mit der Listenanalyse sein? Wenn ja, wie kann das gelöst werden?

Bearbeiten: Hier ist ein Verzeichnis-Cache-Dump:

FileZilla Directory Cache Dump

Dumping 1 zwischengespeicherte Verzeichnisse

Entry 1:
Path: /
Server: [email protected]:21, type: 4096
Directory contains 7 items:
  lrw-r--r-- ftp ftp      D          28      2009-06-17   debian
  lrw-r--r-- ftp ftp      D          31      2009-06-17   debian-cd
  -rw-r--r-- ftp ftp                  0 2010-03-04 13:30  keepalive.txt
  drwxr-xr-x ftp ftp      D        4096 2010-02-18 14:22  mirror
  lrw-r--r-- ftp ftp      D           6      2009-06-17   mirrors
  drwxr-xr-x ftp ftp      D        4096      2009-06-23   packages
  lrw-r--r-- ftp ftp      D           1      2009-06-17   pub

Hier ist mein Code mit einem Wrapper, den ich erstellt habe (das Testen im Wrapper führt zu denselben Ergebnissen):

public static void main(String[] args) {        
    FTPUtils ftpUtils = new FTPUtils();
    Strin,g ftpURL = "ftp.belnet.be";
    Connection connection = ftpUtils.getFTPClientManager().getConnection( ftpURL );

    if( connection == null ){
        System.out.println( "Could not connect" );
        return; 
    }

    FTPClientManager manager = connection.getFptClientManager();
    FTPClient client = manager.getClient();

    try {
        client.enterRemotePassiveMode();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if( connection != null ){
        System.out.println( "Connected to FTP" );
        connection.login("Anonymous", "Anonymous");
        if( connection.isLoggedIn() ){
            System.out.println( "Login successful" );
            LoggedInManager loggedin = connection.getLoggedInManager(); 
            System.out.println( loggedin );
            String[] fileList = loggedin.getFileList();

            System.out.println( loggedin.getWorkingDirectory() );

            if( fileList == null || fileList.length == 0 )
                System.out.println( "No files found" );
            else{
                for (String name : fileList ) {
                    System.out.println( name );
                }
            }

            connection.disconnect();

            if( connection.isDisconnected() )
                System.out.println( "Disconnection successful" );
            else
                System.out.println( "Error disconnecting" );
        }else{
            System.out.println( "Unable to login" );
        }
    } else {
        System.out.println( "Could not connect" );
    }
}

Erzeugt diese Ausgabe:

Connected to FTP
Login succesful
utils.ftp.FTPClientManager$Connection$LoggedInManager@156ee8e
null
No files found
Disconnection successful

Innerhalb des Wrappers (versucht mit beidenlistNames() undlistFiles()):

        public String[] getFileList() {
            String[] fileList = null;
            FTPFile[] ftpFiles = null;

            try {
                ftpFiles = client.listFiles();
                //fileList = client.listNames();
                //System.out.println( client.listNames() );
            } catch (IOException e) {
                return null;
            }

            fileList = new String[ ftpFiles.length ];

            for( int i = 0; i < ftpFiles.length; i++ ){
                fileList[ i ] = ftpFiles[ i ].getName();
            }

            return fileList;
        }

Wie bei FTPClient wird es wie folgt behandelt:

public class FTPUtils {

private FTPClientManager clientManager;

public FTPClientManager getFTPClientManager(){
    clientManager = new FTPClientManager();
    clientManager.setClient( new FTPClient() );

    return clientManager;
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage