Connexion à un serveur FTP en Java

Cet article implémente des exemples de code Java qui montrent comment se connecter et s'identifier à un serveur FTP en utilisant la librairie Apache Commons Net. Assurez-vous que le fichier commons-net.jar existe dans la classpath de votre projet.

La classe net.ftp.FTPClient fournit les bases nécessaires pour interagir avec le serveur via le protocole FTP. Pour connecter au serveur, utilisez cette méthode:

void connect(String server, int port): le serveur peut être définie avec le nom de la machine (hostname) ou l'adresse IP, et le port est un nombre qui sert à écouter les connexions entrantes pour une application donnée. FTP utilise le port 21.

Après la connexion, utilisez cette méthode pour s'identifier:

boolean login(String username, String password): cette méthode retourne true si l'identification a réussi, sinon false.

Il faut obtenir une réponse du serveur FTP après l'appel de la méthode connect():

int reponseFTP = clientFTP.getReplyCode();
if (!reponseFTP.isPositiveCompletion(replyCode)) {
// L'opération a échoué. Le serveur refuse
//la connexion ou rejette l'opération
return;
}
Après chaque appel de méthode, le serveur retourne des messages. La méthode suivante affiche les messages du serveur:

private static void reponseServeur(FTPClient ftpClient) {
String[] reponses = ftpClient.getReplyStrings();
if (reponses != null && reponses.length > 0) {
for (String reponse : reponses) {
System.out.println("SERVEUR: " + reponse);
}
}
}
Voici le code complet qui englobe la connexion, l'identification et la vérification:

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPConnectionLogin {

private static void reponseServeur(FTPClient ftpClient) {
String[] reponses = ftpClient.getReplyStrings();
if (reponses != null && reponses.length > 0) {
for (String reponse : reponses) {
System.out.println("SERVEUR: " + reponse);
}
}
}

public static void main(String[] args) {
String server = "adresseDuServeur";
int port = 21;
String username = "nomUtilisateur";
String password = "motDePasse";
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
reponseServeur(ftpClient);
int reponse = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reponse)) {
System.out.println("Operation échoué. Réponse Serveur: " + reponse);
return;
}
boolean etat = ftpClient.login(username, password);
reponseServeur(ftpClient);
if (!etat) {
System.out.println("Impossible d'accéder au serveur");
return;
} else {
System.out.println("Identification réussie");
}
} catch (IOException ex) {
System.out.println("Une erreur lors de la connexion a été détecté");
ex.printStackTrace();
}
}
}
Compilation et exécution :

SERVEUR: 220---------- Welcome to Pure-FTPd [privsep] ----------
SERVEUR: 220-You are user number 31 of 500 allowed.
SERVEUR: 220-Local time is now 06:02. Server port: 21.
SERVEUR: 220-This is a private system - No anonymous login
SERVEUR: 220 You will be disconnected after 3 minutes of inactivity.
SERVEUR: 230-OK. Current restricted directory is /
SERVEUR: 230-100 files used (1%) - authorized: 10000 files
SERVEUR: 230 5217 Kbytes used (0%) - authorized: 1536000 Kb
Identification réussie