Com base no Apache FTP, os seguintes problemas precisam ser considerados ao fazer upload de arquivos (o exemplo é a função de continuação):
(1) Se o servidor FTP possui uma alteração de diretório, se não existir, você precisa criar um diretório.
(2) Determine se o arquivo carregado já existe. Se existir, precisará ser excluído antes de fazer upload ou transmissão contínua.
1. Carregue ou faça o download da classe de enumeração:
pacote com.scengine.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), Download_From_Break_Success(5), Download_From_Break_Faild(6), 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); status privado int; public int getStatus () {retornar status; } public void setStatus (status int) {this.status = status; } UploadStatus (status int) {this.status = status; }}2. Código da ferramenta:
pacote com.scengine.wtms.utils.ftp; importar java.io.file; importar java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStream; importar java.io.OutputStream; importar 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; classe pública Continuarftp {private ftpClient ftpClient = new ftpClient (); / *** Configurações de construção do objeto Saída Os comandos usados no processo para o console*/ public Continuarftp () {this.ftpclient.addProtocolCommandListener (new PrintCommandListener (new PrintWriter (System.out)); } / ** * * Usado para conectar -se ao servidor FTP na programação java * * @param hostName * hostName * @Param Port * porta * @param userName * nome de usuário * @param senha * senha * @return string porta é bem -sucedida * * @Throws IOException * / public boolean Connect (string hostname, int port, string por porta é bem -sucedida * * @Throws IoException * / public boolean Connect (string hostNeption, int port, string por porta, string * * @Throws IoException * / public boolean (string hostNeCeption, int port, string por porta, string * * @Throws IoException * / public boolean (string hostNeCcept. ftpClient.Connect (nome do host, porta); if (ftPreply.ispositiveciction (ftpClient.getReplyCode ())) {if (ftpClient.login (nome de usuário, senha)) {return true; }} desconect (); retornar falso; } / ** * * Faça o download do arquivo do servidor FTP * * @param remoto * caminho do arquivo remoto * * @param local * caminho do arquivo local * * @return se é bem -sucedido * * @throws ioexception * / @suppresswarnings ("resource") public boolean download (string string, string local) throwsException {FETPENCIENTE ") ftpClient.SetFileType (ftp.binary_file_type); resultado booleano; Arquivo f = novo arquivo (local); Ftpfile [] arquivos = ftpclient.listfiles (remoto); if (files.length! = 1) {System.out.println ("arquivo remoto não é exclusivo"); retornar falso; } long lremotesize = arquivos [0] .getSize (); if (f.Exists ()) {outputStream out = new FileOutputStream (f, true); System.out.println ("O tamanho do arquivo local é:" + f.Length ()); if (f.Length ()> = lremotesize) {System.out.println ("O tamanho do arquivo local é maior que o tamanho do arquivo remoto, download abortado"); retornar falso; } ftpClient.SetRestarToffset (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; }/** * * Faça o upload do arquivo para o servidor FTP, suporta transmissão contínua do ponto de interrupção * * @param local * Nome do arquivo local, caminho absoluto * * @param remoto * caminho de arquivo remoto, use /home/directory1/subdirectory/file.ext * de acordo com o caminho especificado no linux, suportar o nível de nível * liactory, o suportamento que não é o que não é o que não é o que não é o que não é o que não é o que não é o que não é o que não é o que não é o que você está. @THOWS IOException */ @suppresswarnings ("Resource") public uploadStatus upload (string local, string remoto) lança ioexception {// define passivemode para transmitir ftpclient.enterlocalpassivEmode (); // set ftpclient.setFileType (ftp.binary_file_type); Resultado do uploadstatus; // processamento de diretórios remotos string remotefilename = remoto; if (remote.contains ("/")) {remotefilename = remote.substring (remote.lastindexof ("/") + 1); String diretório = remote.substring (0, remote.lastIndexOf ("/") + 1); if (! diretório.equalsignorecase ("/") &&! ftpclient.ChangeworkingDirectory (diretório)) {// Se o diretório remoto não existir, crie o diretório de servidor remoto recursivamente int start = 0; int end = 0; if (diretório.startswith ("/")) {start = 1; } else {start = 0; } end = Directory.indexof ("/", Start); while (true) {String subdirectory = remote.substring (start, end); if (! ftpClient.ChangeWorkingDirectory (subdirectory)) {if (ftpClient.Makedirectory (Subdirectory)) {ftpClient.ChangeWorkingDirectory (subdirectory); } else {System.out.println ("Create Falha ao criar diretório"); return uploadstatus.create_directory_fail; }} start = end + 1; end = diretório.indexof ("/", start); // Verifique se todos os diretórios foram criados se (end <= start) {break; }}}} // Verifique se o arquivo existe no remoto ftpfile [] arquivos = ftpclient.listfiles (remotefileName); if (files.Length == 1) {Long Remotesize = arquivos [0] .getSize (); Arquivo f = novo arquivo (local); Long Localsize = F.Length (); if (remoTesize == Localsize) {return uploadstatus.file_exits; } else if (remotosize> localsize) {return uploadstatus.remote_bigger_local; } // Tente mover o ponteiro no arquivo para realizar a interrupção do ponto de interrupção inputStream is = new FileInputStream (f); if (is.skip (remotaSize) == remotorsize) {ftpclient.setRestartOffset (remotorsize); if (ftpClient.storefile (remoto, is)) {return uploadstatus.upload_from_break_success; }} // Se a interrupção do ponto de interrupção não for bem -sucedida, exclua o arquivo no servidor e envie -o novamente se (! } is = new FileInputStream (f); if (ftpClient.storefile (remoto, is)) {resultado = uploadStatus.upload_new_file_success; } else {resultado = uploadStatus.upload_new_file_failed; } is.close (); } else {inputStream is = new FileInputStream (local); if (ftpClient.StoreFile (RemoteFileName, is)) {resultado = uploadStatus.upload_new_file_success; } else {resultado = uploadStatus.upload_new_file_failed; } is.close (); } resultado de retorno; } / ** * * Desconecte do servidor remoto * * @THOWSowsoException * / public void desconect () lança ioexception {if (ftpclient.isconnected ()) {ftpclient.disconnect (); }} public static void main (string [] args) {continuaftftp myftp = new continuanteftp (); tente {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 ("Erro se conectando ao ftp:" + e.getMessage ()); }}} O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.