Según Apache FTP, se deben considerar los siguientes problemas al cargar archivos (el ejemplo es la función de continuación):
(1) Si el servidor FTP tiene un cambio de directorio, si no existe, debe crear un directorio.
(2) Determine si el archivo cargado ya existe. Si existe, debe eliminarse antes de cargar o continuar la transmisión.
1. Sube o descargue la clase de enumeración:
paquete com.scengine.wtms.utils.ftp; public enum ifoteStatus {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_maller_locall (12); estado privado int; public int getStatus () {Estado de retorno; } public void setstatus (int status) {this.status = status; } IboadStatus (int status) {this.status = status; }}2. Código de herramientas:
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.printwriter; 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; clase pública continúa {private ftpClient ftpClient = new ftpClient (); / *** Configuración de construcción de objetos Salida Los comandos utilizados en el proceso a la consola*/ public continuidad de continuar () {this.ftpclient.AddProtocolCommandListener (new PrintCommandListener (new PrintWriter (System.out))); } / ** * * Se usó 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 (String hostName, int port, string username, string Password) droga iSoTs iOException { ftpClient.connect (nombre de host, puerto); if (ftpreply.ispositiveCompletion (ftpClient.getReplyCode ())) {if (ftpClient.login (username, contraseña)) {return true; }} disconnect (); devolver falso; } / ** * * Descargar archivo desde el servidor FTP * * @Param Remote * Remote Archip Rath * * @param local * ruta de archivo local * * @return si es exitoso * * @throws ioexception * / @suppleswarnings ("recursos") descarga public boolean (cadena remota, string local) lanza ioexception {ftpClient.enterlocalpassivemode ();); ftpclient.setFileType (ftp.binary_file_type); resultado booleano; Archivo f = nuevo archivo (local); Ftpfile [] archivos = ftpclient.listfiles (remoto); if (files.length! = 1) {system.out.println ("El archivo remoto no es único"); devolver falso; } long lremotesize = archivos [0] .getSize (); if (f.exists ()) {outputStream out = new FileOutputStream (f, true); System.out.println ("El tamaño del archivo local es:" + f.length ()); if (f.length ()> = lRemotesize) {system.out.println ("El tamaño del archivo local es mayor que el tamaño de archivo remoto, descarga abortada"); devolver falso; } ftpClient.setRestaroffset (f.length ()); resultado = ftpClient.retrieveFile (remoto, out); out.close (); } else {outputStream out = new FileOutputStream (f); resultado = ftpClient.retrieveFile (remoto, out); out.close (); } resultado de retorno; } /** * * Upload file to the FTP server, support breakpoint continuous transmission* * @param local * Local file name, absolute path* * @param remote * Remote file path, use /home/directory1/subdirectory/file.ext * According to the path specified on Linux, support multi-level directory nesting, support recursively creating non-existent directory structures* * @return Upload result* * @throws IoException */ @SupplesSwarnings ("recursos") Public uploadStatus upload (string local, remoto) lanza ioexception {// establece passiveMode para transmitir ftpclient.enterlocalpassivemode (); // establecer ftpclient.setFileType (ftp.binary_file_type); Resultado de subida; // Procesamiento de 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 el directorio de servidor remoto recursivamente 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 {System.out.println ("Crear Error al crear directorio"); return uploadstatus.create_directory_fail; }} inicio = final + 1; end = directorio.IndexOf ("/", inicio); // verifique si todos los directorios se han creado si (end <= inicio) {break; }}}} // Verifique si el archivo existe en los archivos remotos ftpfile [] = 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 uploadStatus.file_exits; } else if (remoteSize> localsize) {return uploadStatus.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 uploadStatus.upload_from_break_success; }} // Si la interrupción del punto de ruptura no tiene éxito, elimine el archivo en el servidor y vuelva a cargarlo si (! FtpClient.deleteFile (remotaFileName)) {return uploadstatus.delete_remote_faild; } IS = nuevo FileInputStream (f); if (ftpclient.storeFile (remoto, is)) {result = uploadStatus.upload_new_file_success; } else {resultado = uploadStatus.upload_new_file_failed; } is.close (); } else {inputStream is = new FileInputStream (local); if (ftpClient.storeFile (remotoFileName, is)) {result = uploadStatus.upload_new_file_success; } else {resultado = uploadStatus.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) {continuftp myftp = new Contintp (); Pruebe {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 ("Error conectándose a 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.