Apache FTP es una herramienta de cliente de carga FTP ampliamente utilizada. Es fácil de operar, tiene un código simple y una estructura clara. Es una prioridad para el software de administración de clientes de archivos FTP. Las operaciones de FTP incluyen: carga de archivos FTP (transmisión continua de punto continuo), descarga de archivos FTP, cambio de nombre de archivos FTP y eliminación de archivos FTP. Estas operaciones han demostrado completamente el método de administración de aplicaciones FTP. Por lo tanto, siempre he utilizado este método para implementar la administración de servidores de archivos FTP; Adjunto con código de herramienta FTP.
1. Clase de enumeración de estado de operación de archivo FTP
paquete com.scengine.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_faild (4), descargar_from_break_success (5), descargar_from_break_faild (6),, Upload_new_file_success (7), upload_new_file_failed (8), delete_remote_success (9), Delete_remote_faild (10), remoto_bigger_local (11), remoto_smaller_local (12), noT_EXIST_FILE (13), remoto_rename_success (14), remoto_rename_faild (15), file_not_unique (16); estado privado int; public int getStatus () {Estado de retorno; } public void setstatus (int status) {this.status = status; } Ftpstatus (int status) {this.status = status; }} 2. Código de herramienta de operación de archivo FTP
paquete com.scengine.wtms.utils.ftp; import java.io.file; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioException; import java.io.inputstream; import java.io.outputstream; import java.io.outputstream; import java.io.printwriter; import javax.servlet.http.httpservletResponse; importar org.apache.commons.net.printcommandListener; importar org.apache.commons.net.ftp.ftp; importar org.apache.commons.net.ftp.ftpclient; importar org.apache.commons.net.ftp.ftpfile; importar org.apache.commons.net.ftp.ftpreply; import com.scengine.wtms.utils.log; clase pública ftputils {private ftpClient ftpClient = new ftpClient (); / *** Configuración de construcción de objetos Salida Los comandos utilizados en el proceso a la consola*/ public ftputils () {this.ftpclient.AddProtocolCommandListener (new PrintCommandListener (new PrintWriter (System.out))); } / ** * * Se usa para conectarse al servidor FTP en la programación de Java * * * @param hostname * hostname * * @param puerto * puerto * * @param username * username * * @param contraseña * contraseña * @return si la conexión es exitosa * * @throws iOexception * / public boolean Connect (Connect (string hostName, int port, string UserName, string Password) Soils ExitET. ftpClient.connect (nombre de host, puerto); if (ftpreply.ispositiveCompletion (ftpClient.getReplyCode ())) {if (ftpClient.login (username, contraseña)) {return true; }} disconnect (); devolver falso; } / ** * Eliminar archivo ftp remoto * * @param remoto * ruta de archivo remoto * @return * @throws ioexception * / public ftpstatus delete (cadena remota) lanza ioexception {ftpClient.enterLocalPassIvemode (); ftpclient.setFileType (ftp.binary_file_type); Ftpstatus resultado = nulo; Ftpfile [] archivos = ftpclient.listfiles (remoto); if (files.length == 1) {status boolean = ftpclient.deleteFile (remoto); resultado = estado? Ftpstatus.delete_remote_success: ftpstatus.delete_remote_faild; } else {resultado = ftpstatus.not_exist_file; } Log.getLogger (this.getClass ()). Info ("Identificador de deleción del archivo del servidor FTP:"+resultado); resultado de retorno; } / ** * Cambie el nombre del archivo ftp remoto * * * @param nombre * nuevo nombre de archivo remoto (se garantizará que Path-Must estará en la misma ruta) * * * @Param Remote * Remote Archue Rath * * @Return si es exitoso * * @throws ioException * / public ftpStatus (name de cadena, cadena remota) lanza ioexception {ftpClient.enterLocalOndeodeNeDeNeDeNeDeDeNeDeNeDeNeSeN (). ftpclient.setFileType (ftp.binary_file_type); Ftpstatus resultado = nulo; Ftpfile [] archivos = ftpclient.listfiles (remoto); if (files.length == 1) {status boolean = ftpclient.rename (remoto, nombre); resultado = estado? Ftpstatus.remote_rename_success: ftpstatus.remote_rename_faild; } else {resultado = ftpstatus.not_exist_file; } Log.getLogger (this.getClass ()). Info ("FTP Server File Name Update Identifier:"+resultado); resultado de retorno; } / ** * * Descargar archivo desde el servidor ftp * * @param nombre de archivo * descargar el nombre del archivo (incluido el nombre de sufijo) * * @param remoto * ruta de archivo remoto * * @param local * ruta de archivo local * * @return si es exitosa * @Thres Guardar la respuesta de la ventana de selección de ruta.setContentType ("Application/Octet-stream"); Respuesta.setContentType ("Application/Octet-Stream; Charset = UTF-8"); respuesta.setheader ("Disposición de contenido", "Adjunto; FileName =" +FileName); ftpClient.EnterLocalPassivEmode (); ftpclient.setFileType (ftp.binary_file_type); Resultado ftpstatus; OutputStream out = Response.getOutputStream (); estado booleano = ftpClient.retrieveFile (remoto, fuera); resultado = status? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; Log.getLogger (this.getClass ()). INFO ("Identificador de descarga del archivo del servidor FTP:"+resultado); out.close (); resultado de retorno; } / ** * Descargar archivo desde el servidor FTP * * @param remota * ruta de archivo remoto * * @param local * ruta de archivo local * * @return si es exitoso * * @throws ioexception * / @supesswarnings ("recursos") public ftpStatus descargar (cadena remota, local) lanza ioexception {ftpClient.enterlocalpassivemode (););););););););); ftpclient.setFileType (ftp.binary_file_type); Resultado ftpstatus; Archivo f = nuevo archivo (local); Ftpfile [] archivos = ftpclient.listfiles (remoto); if (files.length! = 1) {log.getLogger (this.getClass ()). Info ("El archivo remoto no es único"); return ftpstatus.file_not_unique; } long lremotesize = archivos [0] .getSize (); if (f.exists ()) {outputStream out = new FileOutputStream (f, true); Log.getLogger (this.getClass ()). Info ("El tamaño del archivo local es:" + f.length ()); if (f.length ()> = lRemotesize) {log.getLogger (this.getClass ()). Info ("El tamaño del archivo local es mayor que el tamaño del archivo remoto, descarga abortada"); return ftpstatus.remote_smaller_local; } ftpClient.setRestaroffset (f.length ()); estado booleano = ftpClient.retrieveFile (remoto, fuera); resultado = status? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; out.close (); } else {outputStream out = new FileOutputStream (f); estado booleano = ftpClient.retrieveFile (remoto, fuera); resultado = status? ftpstatus.download_from_break_success: ftpstatus.download_from_break_faild; out.close (); } resultado de retorno; }/** * Cargue el archivo en el servidor FTP, admite la transmisión continua del punto de interrupción * * @param Nombre de archivo local * local, ruta absoluta * * @param rota * ruta de archivo remoto, use /home/directory1/subdirectory/file.ext * según la ruta especificada en Linux, el nido de directorio multi-lateral de Linux es compatible y es compatible con el structure de directorio no existente. @throws ioException */ @suppleswarnings ("recurso") public ftpstatus upload (string local, string remoto) lanza ioexception {// establecer passivemode para transmitir ftpclient.enterlocalpassivemode (); // Establecer para transmitir ftpclient.setFileType (ftp.binary_file_type); Resultado ftpstatus; // manejar directorios remotos cadena remotaFileName = remoto; if (remoto.contains ("/")) {remotosfileName = remoto.substring (remoto.lastindexof ("/") + 1); Directorio de cadena = remoto.substring (0, remoto.lastindexof ("/") + 1); if (! Directory.equalSignorecase ("/") &&! ftpclient.changeworkingDirectory (directorio)) {// Si el directorio remoto no existe, cree recursivamente el directorio de servidor remoto int inicio = 0; int end = 0; if (directorio.startswith ("/"))) {start = 1; } else {inicio = 0; } end = Directory.IndexOf ("/", inicio); while (true) {String Subdirectory = Remote.Substring (inicio, final); if (! ftpClient.ChangeWorkingDirectory (subdirectory)) {if (ftpClient.MakedIrectory (subdirectory)) {ftpClient.ChangeWorkingDirectory (subdirectory); } else {log.getLogger (this.getClass ()). Info ("Crear directorio fallido"); return ftpstatus.create_directory_fail; }} inicio = final + 1; end = directorio.IndexOf ("/", inicio); // verifique si todos los directorios se han creado si (end <= inicio) {break; }}}}} // verifique si hay un archivo remoto ftpfile [] archivos = ftpclient.listfiles (remoteFileName); if (files.length == 1) {long remoTesize = files [0] .getSize (); Archivo f = nuevo archivo (local); Long Localsize = f.length (); if (remotesize == localsize) {return ftpstatus.file_exits; } else if (remoteSize> localsize) {return ftpstatus.remote_bigger_local; } // intente mover el puntero en el archivo para realizar la interrupción de la entrada de punto de interrupción IS = new FileInputStream (f); if (is.skip (remotesize) == remotesize) {ftpClient.setResttoffset (remota); if (ftpclient.storeFile (remoto, is)) {return ftpstatus.upload_from_break_success; }} // Si el punto de interrupción continúa pasando sin éxito, elimine el archivo en el servidor y vuelva a cargarlo si (! FtpClient.deleteFile (remoteFileName)) {return ftpstatus.delete_remote_faild; } IS = nuevo FileInputStream (f); if (ftpclient.storeFile (remoto, is)) {result = ftpstatus.upload_new_file_success; } else {resultado = ftpstatus.upload_new_file_failed; } is.close (); } else {inputStream is = new FileInputStream (local); if (ftpClient.storeFile (remotoFileName, is)) {result = ftpStatus.upload_new_file_success; } else {resultado = ftpstatus.upload_new_file_failed; } is.close (); } resultado de retorno; } / ** * * Desconecte desde el servidor remoto * * @throws ioexception * / public void disconnect () lanza ioexception {if (ftpClient.isConnected ()) {ftpClient.disconnect (); }} public static void main (string [] args) {ftputils myftp = new ftputils (); Pruebe {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 ("Excepción de archivo de carga FTP:" + E.getMessage ()); }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.