Sur la base d'Apache FTP, les problèmes suivants doivent être pris en compte lors du téléchargement de fichiers (l'exemple est la fonction de continuation):
(1) Si le serveur FTP a un changement de répertoire, s'il n'existe pas, vous devez créer un répertoire.
(2) Déterminez si le fichier téléchargé existe déjà. S'il existe, il faut supprimer avant le téléchargement ou la transmission continue.
1. Téléchargez ou téléchargez la classe d'énumération:
package com.sgenne.wtms.utils.ftp; public enum uploadStatus {file_exits (0), create_directory_success (1), create_directory_fail (2), upload_from_break_success (3), upload_from_break_faild (4), téléchargement Upload_new_file_success (7), upload_new_file_failed (8), Delete_Remote_Success (9), Delete_Remote_Faild (10), Remote_Bigger_Local (11), Remote_Smaller_Locall (12); Statut int privé; public int getStatus () {statut de retour; } public void setStatus (int status) {this.status = statut; } UploadStatus (int status) {this.status = status; }}2. Code d'outil:
package com.sgenne.wtms.utils.ftp; Importer java.io.file; import java.io.fileInputStream; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.inputStream; import java.io.outputStream; import java.io.printwriter; import org.apache.commons.net.printCommandListener; import org.apache.commons.net.ftp.ftp; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpfile; import org.apache.commons.net.ftp.ftpreply; classe publique continueftpp {private ftpClient ftpClient = new ftpClient (); / ** * Paramètres de construction d'objets Sortie Les commandes utilisées dans le processus à la console * / public continuftpp () {this.ftpclient.addprotoColCommandListener (new PrintCommandListener (new PrintWriter (System.out))); } / ** * * Utilisé pour se connecter au serveur FTP dans Java Programming * * @param hostname * hostname * @param port * port * @param nom d'utilisateur * username * @param mot de passe * mot de passe * @return si la connexion est réussie * * @throws ioException * / public boolean connect (String hostname, int, port, string userName, string mot de passe) ftpClient.connect (nom d'hôte, port); if (ftpreply.ispositivecompletion (ftpclient.getReplyCode ())) {if (ftpClient.login (username, mot de passe)) {return true; }} disconnect (); retourne false; } / ** * * Télécharger le fichier à partir du serveur FTP * * @param Remote * Path de fichier distant * * @param Local * Path de fichier local * * @return s'il réussit * * @throws ioexception * / @SuppressWarnings ("Resource") public boolean download (string totel, string local) lance ioException {ftpclient.enterLocalpassiveMode (); ftpClient.setFileType (ftp.binary_file_type); Résultat booléen; Fichier f = nouveau fichier (local); Ftpfile [] files = ftpclient.listFiles (distant); if (files.length! = 1) {System.out.println ("Le fichier distant n'est pas unique"); retourne false; } long lremotesize = files [0] .getSize (); if (f.exists ()) {outputStream out = new FileOutputStream (f, true); System.out.println ("La taille du fichier local est:" + f.length ()); if (f.length ()> = lremotesize) {System.out.println ("La taille du fichier local est supérieure à la taille du fichier distant, télécharger abandonné"); retourne false; } ftpclient.setRestartOffset (f.length ()); result = ftpclient.RetReeveFile (distant, out); out.close (); } else {outputStream out = new FileOutputStream (f); result = ftpclient.RetReeveFile (distant, out); out.close (); } Retour Résultat; } / ** * * Télécharger le fichier sur le serveur FTP, prendre en charge la transmission continue continue * * @Param Nom local * Nom du fichier local, chemin absolu * * @param Remote * chemin de fichier distant, utilisation /home/directory1/subdirectory/file.Ext * Selon le chemin spécifié sur Linux, support le répertoire multi-level * @Throws ioException * / @SuppressWarnings ("Resource") public uploadSatus upload (String local, string distant) lève ioException {// set passiveMode pour transmettre ftpclient.enterLocalPassiveMode (); // définir ftpclient.setFileType (ftp.binary_file_type); Résultat de téléchargement; // Traitement des répertoires distants String RemoteFileName = Remote; if (reote.Contains ("/")) {RemoteFileName = Remote.SubString (Remote.LastIndexof ("/") + 1); String Directory = Remote.SubString (0, Remote.LastIndexof ("/") + 1); if (! répertoire.equalsignorecase ("/") &&! ftpclient.changeworkingDirectory (répertoire)) {// Si le répertoire distant n'existe pas, créez le répertoire de serveur distant int start = 0; int end = 0; if (répertoire.startswith ("/")) {start = 1; } else {start = 0; } end = Directory.Indexof ("/", start); while (true) {string subdirectory = reote.SubString (start, end); if (! ftpClient.changeworkingDirectory (subdirectory)) {if (ftpclient.makedirectory (subdirectory)) {ftpclient.changeworkingDirectory (subdirectory); } else {System.out.println ("Create a échoué pour créer un répertoire"); return uploadStatus.create_directory_fail; }} start = end + 1; end = répertoire.indexof ("/", start); // Vérifiez si tous les répertoires ont été créés if (end <= start) {Break; }}}} // Vérifiez si le fichier existe dans le ftpfile éloigné [] files = ftpclient.listFiles (RemoteFileName); if (files.length == 1) {long remotesize = files [0] .getSize (); Fichier f = nouveau fichier (local); LocalSize long = f.length (); if (Remotesize == LocalSize) {return uploadStatus.file_Exits; } else if (Remotesize> localSize) {return uploadStatus.remote_bigger_local; } // Essayez de déplacer le pointeur dans le fichier pour réaliser que l'interruption de Breakpoint InputStream est = new FileInputStream (f); if (is.skip (Remotesize) == Remotesize) {ftpClient.setRestartOffset (Remotesize); if (ftpclient.storefile (distant, IS)) {return uploadStatus.upload_from_break_success; }} // Si l'interruption du point d'arrêt ne réussit pas, supprimez le fichier sur le serveur et téléchargez-le à nouveau si (! FtpClient.deleteFile (RemoteFileName)) {return uploadStatus.delete_remote_faild; } est = new FileInputStream (f); if (ftpclient.storefile (distant, IS)) {result = uploadstatus.upload_new_file_success; } else {result = uploadstatus.upload_new_file_failed; } is.close (); } else {inputStream est = new FileInputStream (local); if (ftpclient.storefile (RemoteFileName, IS)) {result = uploadsatus.upload_new_file_success; } else {result = uploadstatus.upload_new_file_failed; } is.close (); } Retour Résultat; } / ** * * Débranchez-vous du serveur distant * * @throws ioException * / public void disconnect () lève ioException {if (ftpClient.isconnected ()) {ftpClient.Disconnect (); }} public static void main (String [] args) {contineftp myftp = new Casureftp (); essayez {myftp.connect ("192.168.1.200", 21, "Duser", "htpDuserXp32"); System.out.println (myftp.upload ("c: //users//administrator//desktop//swing.drawer.jar", "/jars/swing.drawer.jar")); myftp.disconnect (); } catch (ioException e) {System.out.println ("Erreur de connexion à ftp:" + e.getMessage ()); }}} Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.