English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Este artículo introduce cómo usar el conjunto de herramientas Apache Commons-La herramienta ftp proporcionada por net realiza la subida y descarga de archivos al servidor ftp.
I. Preparación
Necesita referenciar commons-net-3.5.jar paquete.
Importar usando maven:
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.5</version> </dependency>
Descarga manual:
https://es.oldtoolbag.com/softs/550085.html
II. Conectar al servidor FTP
/** * Conectar al servidor FTP * @throws IOException */ public static final String ANONYMOUS_USER="anonymous"; private FTPClient connect(){ FTPClient client = new FTPClient(); try{ //Conectar al servidor FTP client.connect(this.host, this.port); //Inicio de sesión if(this.user==null||"".equals(this.user)){ //Usar inicio de sesión anónimo client.login(ANONYMOUS_USER, ANONYMOUS_USER); } else{ client.login(this.user, this.password); } //Establecer formato de archivo client.setFileType(FTPClient.BINARY_FILE_TYPE); //Obtener respuesta del servidor FTP int reply = client.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ client.disconnect(); return null; } //Cambiar directorio de trabajo changeWorkingDirectory(client); System.out.println("===Conectado a FTP: ")+servidor+":"+port); } catch(IOException e){ return null; } return client; } /** * Cambiar directorio de trabajo, crear directorio si el directorio remoto no existe * @param client * @throws IOException */ private void changeWorkingDirectory(FTPClient client) throws IOException{ if(this.ftpPath!=null&&!"".equals(this.ftpPath)){ Boolean ok = client.changeWorkingDirectory(this.ftpPath); if(!ok){ //ftpPath no existe, crear directorio manualmente StringTokenizer token = new StringTokenizer(this.ftpPath,"\\",//"); while(token.hasMoreTokens()){ String path = token.nextToken(); client.makeDirectory(path); client.changeWorkingDirectory(path); } } } } /** * Desconectar conexión FTP * @param ftpClient * @throws IOException */ public void close(FTPClient ftpClient) throws IOException{ if(ftpClient!=null && ftpClient.isConnected()){ ftpClient.logout(); ftpClient.disconnect(); } System.out.println("!!!Desconectar conexión FTP: ")+servidor+":"+port); }
host: dirección IP del servidor ftp
port: puerto del servidor ftp
user: usuario de inicio de sesión
password: contraseña de inicio de sesión
Si el usuario de inicio de sesión está vacío, se utiliza el usuario anónimo para iniciar sesión.
ftpPath: ruta ftp, si la ruta ftp no existe, se crea automáticamente. Si es una estructura de directorios de múltiples niveles, se deben crear directorios iterativamente.
Tres, subir archivo
/** * Subir archivo * @param targetName Nombre del archivo subido a ftp * @param localFile Ruta del archivo local * @return */ public Boolean subir(String targetName,String localFile){ //Conectar al servidor ftp FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("Conectando al servidor FTP["+servidor+":"+puerto+"]¡Fallo!"); return false; } File file = new File(localFile); //Establecer nombre de archivo después de la subida if(targetName==null||"".equals(targetName)) targetName = file.getName(); FileInputStream fis = null; try{ long now = System.currentTimeMillis(); //Comenzando subida de archivo fis = new FileInputStream(file); System.out.println(">>>Comenzando subida de archivo:"+); Boolean ok = ftpClient.storeFile(targetName, fis); if(ok){ //Éxito de subida long times = System.currentTimeMillis(); - now; System.out.println(String.format(">>>Éxito de subida: tamaño:%s, tiempo de subida:%d segundos", formatSize(file.length()), times/1000)); } else//Fallo de subida System.out.println(String.format(">>>Fallo de subida: tamaño:%s", formatSize(file.length()))); } catch(IOException e){ System.err.println(String.format(">>>Fallo de subida: tamaño:%s", formatSize(file.length()))); e.printStackTrace(); return false; } finally{ try{ if(fis!=null) fis.close(); close(ftpClient); } catch(Exception e){ } } return true; }
Cuatro, descargar archivo
/** * Descargar archivo * @param localPath Ruta de almacenamiento local * @return */ public int descargar(String localPath){ // Conectar al servidor ftp FTPClient ftpClient = connect(); if(ftpClient==null){ System.out.println("Conectando al servidor FTP["+servidor+":"+puerto+"]¡Fallo!"); return 0; } File dir = new File(localPath); if(!dir.exists()) dir.mkdirs(); FTPFile[] ftpFiles = null; try{ ftpFiles = ftpClient.listFiles(); if(ftpFiles==null||ftpFiles.length==0) return 0; } catch(IOException e){ return 0; } int c = 0; for (int i=0;i<ftpFiles.length;i++{ FileOutputStream fos = null; try{ String name = ftpFiles[i].getName(); fos = new FileOutputStream(new File(dir.getAbsolutePath()+File.separator+name)); System.out.println("<<<Inicio de descarga de archivo:")+name); long now = System.currentTimeMillis(); Boolean ok = ftpClient.retrieveFile(new String(name.getBytes("UTF-8"),"ISO-8859-1"), fos); if(ok){ //Descarga exitosa long times = System.currentTimeMillis(); - now; System.out.println(String.format("<<<Descarga exitosa: tamaño:%s, tiempo de subida:%d segundos", formatSize(ftpFiles[i].getSize()), times/1000)); c++; } else{ System.out.println("<<<Descarga fallida"); } } catch(IOException e){ System.err.println("<<<Descarga fallida"); e.printStackTrace(); } finally{ try{ if(fos!=null) fos.close(); close(ftpClient); } catch(Exception e){ } } } return c; }
formatear el tamaño del archivo
private static final DecimalFormat DF = new DecimalFormat("#.##"); /** * formatear el tamaño del archivo (B, KB, MB, GB) * @param size * @return */ private String formatSize(long size){ " B";1024{ " KB"; + return size }1024*1024{ " KB";/1024 + else if(size< }1024*1024*1024{ return (size/(1024*1024)) + " MB"; }else{ double gb = size/(1024*1024*1024); return DF.format(gb)+" GB"; } }
Cinco, prueba
public static void main(String args[]){ FTPTest ftp = new FTPTest("192.168.1.10",21,null,null,"/temp/2016/12"); ftp.upload("newFile.rar", "D:",/ftp/TeamViewerPortable.rar"); System.out.println(""); ftp.download("D:",/ftp/"); }
Resultado
=== Conectar a FTP:192.168.1.10:21 >>> Comienza a subir el archivo: TeamViewerPortable.rar >>> Subida exitosa: tamaño:5 MB, tiempo de subida:3segundo !!! Desconectar la conexión FTP:192.168.1.10:21 === Conectar a FTP:192.168.1.10:21 <<< Comienza a descargar el archivo: newFile.rar <<< Descarga exitosa: tamaño:5 MB, tiempo de subida:4segundo !!! Desconectar la conexión FTP:192.168.1.10:21
Resumen
Esto es todo el contenido detallado sobre la implementación de la transferencia de archivos FTP utilizando la herramienta Apache en Java que se menciona en este artículo. Espero que sea útil para todos. Los amigos interesados pueden continuar leyendo otros temas relacionados en este sitio. Si hay algo que no está bien, por favor déjenos un mensaje. Agradecemos el apoyo de los amigos a este sitio!
Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad del autor original, el contenido se ha contribuido y subido por los usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.