Problème avec org.apache.commons.net.ftp.FTPClient listFiles()
La listFiles()
méthode de org.apache.commons.net.ftp.FTPClient
fonctionne très bien avec Filezilla server sur 127.0.0.1, mais renvoie null
sur le répertoire racine de serveurs FTP publics tels que belnet.être.
Il y a une question identique sur le lien ci-dessous mais enterRemotePassiveMode()
ne semble pas aider.
Apache Commons FTPClient.listFiles
Pourrait-il être un problème avec la liste de l'analyse? Si oui, comment résoudre cela?
Edit: Voici un répertoire de cache vidage:
FileZilla Répertoire De Cache Vidage
Dumping 1 mise en cache des répertoires
Entry 1:
Path: /
Server: anonymous@ftp.belnet.be: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
Voici mon code à l'aide d'un wrapper j'ai fait (tests à l'intérieur de l'emballage du produit les mêmes résultats):
public static void main(String[] args) {
FTPUtils ftpUtils = new FTPUtils();
String 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" );
}
}
Produit de cette sortie:
Connected to FTP
Login succesful
utils.ftp.FTPClientManager$Connection$LoggedInManager@156ee8e
null
No files found
Disconnection successful
À l'intérieur de l'emballage (en tentée à l'aide de deux listNames()
et listFiles()
):
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;
}
Comme pour FTPClient, il est géré comme suit:
public class FTPUtils {
private FTPClientManager clientManager;
public FTPClientManager getFTPClientManager(){
clientManager = new FTPClientManager();
clientManager.setClient( new FTPClient() );
return clientManager;
}
OriginalL'auteur James P. | 2010-04-05
Vous devez vous connecter pour publier un commentaire.
Chaque serveur FTP a une autre liste de fichiers de mise en page (oui, ça ne fait pas partie de la norme FTP, c'est bête), et donc vous devez utiliser le bon
FTPFileEntryParser
, soit en spécifiant manuellement, ou de permettre à CommonsFTP d'auto-detect.Détection automatique fonctionne généralement bien, mais parfois ça ne marche pas, et vous devez le spécifier explicitement, par exemple
Cela est explicitement prévu le serveur FTP de type UNIX. Essayez les différents types, voir comment il va. J'ai essayé de trouver par moi-même, mais
ftp.belnet.be
refuse mes connexions 🙁Vous pourriez, je suppose, fournir votre propre mise en œuvre de
FTPFileEntryParser
par la façon dont la valeur par défaut est Unix si vous voyez le constructeur c'est comme ce public FTPClientConfig () {("UNIX"); }
OriginalL'auteur skaffman
Avez-vous essayé de vérifier que vous pouvez obtenir la liste des fichiers en utilisant la normale client FTP? (Pour une raison quelconque, je ne peux même pas se connecter au FTP port de belnet.être".)
MODIFIER
Selon la javadoc de listFiles(), l'analyse syntaxique est réalisée à l'aide de la FTPFileEntryParser exemple fourni par l'analyseur d'usine. Vous avez probablement besoin de déterminer lequel des analyseurs correspond au serveur FTP de la LISTE de sortie et de configurer l'usine en conséquence.
Merci. Aussi, l'adresse ftp est http://ftp.belnet.be.
OriginalL'auteur Stephen C
Il y avait un problème d'analyse dans les précédentes version d'apache Commons-net , le SYST de commande qui retourne le type de serveur quand retourne null ( brusquement ) n'a pas été gérée dans parsingException . Essayez d'utiliser le dernière pot de apache commons-net, il peut résoudre votre problème.
OriginalL'auteur Raja