Apache FTP est un outil client FTP Téléchargement largement utilisé. Il est facile à utiliser, a un code simple et une structure claire. Il s'agit d'une priorité pour le logiciel de gestion de la clientèle FTP. Les opérations FTP incluent: FTP File Teload (BreakPoint Continuous Transmission), FTP File Download, FTP File Renommanding et FTP File Deletion. Ces opérations ont entièrement démontré la méthode de gestion des applications FTP. J'ai donc toujours utilisé cette méthode pour implémenter la gestion des serveurs de fichiers FTP; joint avec le code d'outil FTP.
1. Classe d'énumération d'état de l'opération de fichier FTP
package com.sgenne.wtms.utils.ftp; public enum ftpstatus {file_exits (0), create_directory_success (1), create_directory_fail (2), upload_from_break_success (3), upload_from_break_from_brep Upload_new_file_success (7), upload_new_file_failed (8), delete_remote_success (9), Delete_Remote_Faild (10), Remote_Bigger_Local (11), Remote_Smaller_Local (12), Not_Exist_File (13), Remote_Rename_Success (14), Remote_rename_faild (15), File_Not_Unique (16); Statut int privé; public int getStatus () {statut de retour; } public void setStatus (int status) {this.status = statut; } Ftpstatus (int status) {this.status = status; }} 2. Code d'outil de fonctionnement du fichier FTP
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.outputStream; import java.io.printwriter; import javax.servlet.http.httpservletResponse; 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; import com.sgenne.wtms.utils.log; classe publique ftputils {private ftpClient ftpClient = new ftpClient (); / ** * Paramètres de construction d'objets Sortie Les commandes utilisées dans le processus de la console * / public ftputils () {this.ftpclient.adddprotoColCommandListener (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, int, string userame, 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; } / ** * DELETE Fichier FTP distant * * @Param Remote * Path de fichier distant * @return * @throws ioException * / public ftpstatus delete (string éloigné) lance ioException {ftpClient.enterLocalPassiveMode (); ftpClient.setFileType (ftp.binary_file_type); Résultat ftpstatus = null; Ftpfile [] files = ftpclient.listFiles (distant); if (files.length == 1) {boolean status = ftpClient.deleteFile (distant); result = statut? Ftpstatus.delete_remote_success: ftpstatus.delete_remote_faild; } else {result = ftpstatus.not_exist_file; } Log.getLogger (this.getClass ()). Info ("Identifiant de délétion de fichiers de serveur FTP:" + résultat); Résultat de retour; } / ** * Renommer le fichier FTP distant * * @param Nom * nouveau nom de fichier distant (Path-Must Soyez garanti pour être sous le même chemin) * * @Param Remote * Path Fichier Remote * * @return si elle est réussie * * @throws ioException * / FTPCLIENT.EnterLocalPassIveLiveLive (); ftpClient.setFileType (ftp.binary_file_type); Résultat ftpstatus = null; Ftpfile [] files = ftpclient.listFiles (distant); if (files.length == 1) {boolean status = ftpClient.Rename (télécommande, nom); result = statut? Ftpstatus.remote_rename_success: ftpstatus.remote_rename_faild; } else {result = ftpstatus.not_exist_file; } Log.getLogger (this.getClass ()). Info ("FTP Server Name Update Identifier:" + Result); Résultat de retour; } / ** * * Télécharger le fichier depuis le serveur FTP * * @param nom de fichier * télécharger le nom du fichier (y compris le nom du suffixe) * * @param distote * chemin de fichier distant * * @param local * PATAINE LOCAL * * @Return s'il est réussi * * @throws ioexception * / public ftpstatus téléchargement (filen de chaîne, file d'attente de la chaîne, httpleserRetresponse. SAVE PATH SELECTION Window Response.SetContentType ("Application / Octet-Stream"); Response.SetContentType ("Application / OCTET-Stream; charSet = UTF-8"); Response.SetHeader ("Content-Disposition", "Pixe; FileName =" + FileName); ftpClient.enterLocalPassiveMode (); ftpClient.setFileType (ftp.binary_file_type); Résultat ftpstatus; OutputStream out = réponse.getOutputStream (); Boolean Status = ftpClient.RetReeveFile (distant, out); result = status? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; Log.getLogger (this.getClass ()). Info ("FTP Server File Download Identifier:" + Result); out.close (); Résultat de retour; } / ** * 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 ftpstatus téléchargement (String Remote, string local) throws ioException {ftpclient.enterLocalpassiVeMode (); ftpClient.setFileType (ftp.binary_file_type); Résultat ftpstatus; Fichier f = nouveau fichier (local); Ftpfile [] files = ftpclient.listFiles (distant); if (files.length! = 1) {log.getLogger (this.getClass ()). info ("le fichier distant n'est pas unique"); return ftpstatus.file_not_unique; } long lremotesize = files [0] .getSize (); if (f.exists ()) {outputStream out = new FileOutputStream (f, true); Log.getLogger (this.getClass ()). Info ("La taille du fichier local est:" + f.length ()); if (f.length ()> = lremotesize) {log.getLogger (this.getClass ()). info ("La taille du fichier local est supérieure à la taille du fichier distant, téléchargement abandonné"); return ftpstatus.remote_smaller_local; } ftpclient.setRestartOffset (f.length ()); Boolean Status = ftpClient.RetReeveFile (distant, out); result = status? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; out.close (); } else {outputStream out = new FileOutputStream (f); Boolean Status = ftpClient.RetReeveFile (distant, out); result = status? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; out.close (); } Retour Résultat; } / ** * Télécharger le fichier sur le serveur FTP, prendre en charge la transmission continue de point d'arrêt * * @Param Nom du fichier local *, chemin absolu * * @param Remote * chemin de fichier à distance, utilisation /home/directory1/subdirectory/file.EXT * Selon le chemin spécifié sur les structures directeurs de la répertoire multi-lancier * * Résultat * * @throws ioException * / @SuppressWarnings ("Resource") public ftpStatus upload (String local, String Remote) lève ioException {// set passiveMode pour transmettre ftpclient.enterLocalPassiveMode (); // défini pour transmettre ftpclient.setFileType (ftp.binary_file_type); Résultat ftpstatus; // Gire les répertoires distants String string étestaFileName = 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 récursivement 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 {log.getLogger (this.getClass ()). info ("Créer un échec du répertoire"); return ftpstatus.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 s'il existe un fichier ftpfile [] 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 ftpstatus.file_exits; } else if (Remotesize> localSize) {return ftpstatus.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 ftpstatus.upload_from_break_success; }} // Si le point d'arrêt continue de passer sans succès, supprimez le fichier sur le serveur et téléchargez-le à nouveau si (! FtpClient.deleteFile (RemoteFileName)) {return ftpstatus.delete_remote_faild; } est = new FileInputStream (f); if (ftpclient.storefile (distant, IS)) {result = ftpstatus.upload_new_file_success; } else {result = ftpstatus.upload_new_file_failed; } is.close (); } else {inputStream est = new FileInputStream (local); if (ftpclient.storefile (RemoteFileName, IS)) {result = ftpstatus.upload_new_file_success; } else {result = ftpstatus.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) {ftputils myftp = new ftputils (); essayez {myftp.connect ("192.168.1.200", 21, "Duser", "htpDuserXp32"); Log.getLogger (ftputils.class) .info (myftp.upload ("c: //users//administrator//desktop//swing.drawer.jar", "/jars/swing.drawer.jar")); myftp.disconnect (); } catch (ioException e) {log.getLogger (ftputils.class) .info ("FTP Téléchargez l'exception du fichier:" + 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.