Conexión FTP con java
Otra vez java nos da otra herramienta de trabajo, esta vez es la posibilidad de establacer conexiones a un sitio con el protocolo FTP desde java.
Qué es FTP?
FTP es protocolo que nos permite enviar o recibir datos de un punto a otro, llámese una pc, servidor, o cualquier otro nodo que esté conectada a una misma red.
Normalmente cuando disponemos de un host en la web estos disponen de cuentas FTP para falicitar el envío de archivos desde nuestra pc al servidor donde esta alojado nuestro sitio.
Investigando por ahí me encontro una librería de cliente FTP muy útil, lo he probado y va de maravilla. La librería JvFTP Client proporciona tareas muy interesantes, entre ellas:
- Subida/descarga de archivos
- Subida de directorios recursivamente
- Tranferencia de datos concurrente
- Modo de tranferencias de datos pasivo/activo
- Componentes Swing para visualizar los directorios
- Componentes AWTpara visualizar los directorios
Esta herramienta esta disponible en jvftp y puede ser usado de dos formas, que ejecutes directamente el jar, o que hagas tu propia programación incluyendo las librerías en tu proyecto.
Si quieres programar tu propio ejemplo acá voy a dejar una pequeña guía de como lo puedes hacer, veamos…
… Lo primero que debes hacer es incorpor las paquetes descargados de jvftp en tu proyecto. Luego debes importar las librerías a la clase en la cual vas a hacer la conexión:
import java.io.IOException; import cz.dhl.io.*; import cz.dhl.ftp.*;
Ahora debemos crear la conexión, la conexión en preparar los datos antes de crear acceder al sitio FTP. Vamos a empezar con el servidor:
FtpConnect cn = FtpConnect.newConnect("ftp://ftp.dominio.com");
El valor ftp.dominio.com es el servidor al cual se va a conectar. Cada cuenta ftp esta compuesta al menos por el nombre del servidor, el usuario y la contraseña. Para iniciar la sesión con dicha cuenta se hace algo como esto:
// se ingresa el usuario
cn.setUserName("usuario");
// se ingresa la contraseña
cn.setPassWord("contraseña");
Luego se crea un objeto de tipo FTP, que será el encargado de mostrar toda la información de nuestro sitio FTP.
Ftp cl = new Ftp();
Ahora se establece la conexión al sitio FTP para empezar a procesar las tareas respectivas
cl.connect(cn);
Un ejemplo práctico para comprobar la conexión sería mostrar el directorio actual con sus respectivos archivos:
CoFile dir = new FtpFile(cl.pwd(), cl);
// hacer una lista de archivos que tiene el directoria actual
CoFile fls[] = dir.listCoFiles();
if ( fls != null )
for (int n = 0; n < fls.length; n++)
System.out.println( fls[n].getName() + (fls[n].isDirectory() ? "/" : ""));
Para finalizar, solo queda cerrar la conexión.
cl.disconnect();
29 comments
Trackbacks/Pingbacks
- Bajar y subir archivos con JvFTP | Apuntes de programación - [...] http://www.apuntes.delibertad.com/java/conexion-ftp-con-java/ [...]
Gracias por la info, solo quisiera preguntar, como hacer para escribir un archivo al servidor http://ftp.?
para subir y bajar archivos del ftp -> http://jvftp.sourceforge.net/docs/tutorial2.html#COPY
Me da este error:
cz/dhl/io/CoFile (Unsupported major.minor version 49.0)
la version que estoy usando es:
java version “1.6.0_15″
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)
¿que debería hacer para resolver este problema?
Necesito leer un fichero que me dejan en un servidor, concretamente un cvs, y cuyo contenido debo de tratar para actualizar una base de datos. Estaba intentando copiar el fichero del servidor a mi equipo pero me da el error que comento arriba.
Hola,
Mil disculpas, pensaba que me había bajado la version correcta, se me ha solucionado el problema al descargarme la versión que corresponde:(jvftp-bin-0_72.zip ).
Unos apuntes buenisimos, muchas gracias.
disculpe, esta libreria lo redirecciona aun host no deseado, no entiendo como funciona.
Hola me ha servido esta informacion de marabilla, pero no se muy bien el como pasar un archivo que tengo localmente a una direccion de un servidor a ftp, me puedes ayudar?
disculpa si deseo subir y bajar directorios como utilizaria esta libreria ? … gracias ante todo
Puedes usar el objeto CoLoad que permite copiar objetos entre diferentes hosts:
copy(CoFile dst, CoFile file)
pero el coload.copy() tendra que aceptar parametros con [] de todo contenido del directorio ? o como se realizaria disculpa la molestia
El CoFile es un tipo de objeto que sustituye al tipo de File de java. Si mas no recuerdo solo debes hacer algo asi:
CoFile f = new CoFile( java.io.File(“hola.txt”));
Prueba a ver como te va.
no me sale a la hora de utilizarlo para descargarme el contenido de un directorio es decir algo de 300 archivos … por ejemplo descargar al disco local el directorio :”/ejemplo/ejercicios” que se encuentra en el servidor a eso me refiero ? ….
Ok,
ahora mismo estoy haciendo una prueba, déjame a ver como me va y te cuento!
Aquí logré hacer un ejemplo sencillo de cómo bajar y subir archivos:
http://www.apuntes.delibertad.com/java/bajar-y-subir-archivos-con-jvftp/
gracias me servio tu aporte … lo unico es que si deseo utilizarlo para descargalo varios archivos a la vez ..debo modificarlo ahora sabes algo de hilos para que la descarga de 100000 archivos a la vez sea mas rapido en menor tiempo con la utilizacion de threads en java?? …..
Mira, no estoy exactamente seguro si es más rápido descargar los archivos simultaneamente con archivos, ya que el ancho de de banda de descarga se dividirá también entre ellos. POr lo tanto, dá lo mismo hacerlo así o descargando los archivos uno por uno.
disculpa sino que quiero hacer una simulacion como el filezilla ya que cuando escoges varios archivos para descargar se puede realizar simultaneamente y con procesos paralelos utilizando hilos por lo que se yo!
si, exacto, no te estoy diciendo que no se pueda, pero es cuestion de gustos y de conveniencia. Dime ¿Sabes usar hilos? ¿alguna vez has hecho uno?
recien estoy investigando sobre ese tema … solo hice algunos ejemplos basicos por eso te comentana integrar los hilos para la descarga masiva de archivos
Perfecto, una vez que hayas hecho un par de ejemplos y sepas como funcionan los hilos no dude en preguntarme y te echo la mano para integrarlo aca
disculpa, entiendo tendras algunos ejemplos de hilos en java que puedan aplicarse a este tema de http://ftp.. descarga de archivos y directorios te lo agradeceria.
sobre temas de threads o hilos*
Hola,
Puedes intentar hacer una clase que extienda de threat que contenga el archivo a bajar/subir. Y el metodo run que ejecute el metodo segun sea el caso!
pero si deseo que cada hilo realize una operacion diferente =? se podria realizar
Claro, depende de como tengas tu estructura, pero si quieres que unos hilos hagan una cosa y otros hilas que hagan algo distinto pues si, si se puede. Recuerda que cada hilo puede recibir un parametro “archivo”, que sera descargado una vez que le notifiques
disculpa nose si estaria abusando de tu ayuda .. pero me podrias pasar un ejemplo ..tutorial o un demo o alguna pagina que me indique como hacerlo ? te lo agradeceria … gracias ..
Hola me funciona muy bien el único problema es que cuando un archivo lo baja o lo sube del servidor cambia el tamaño del mismo eso no se porque me pueden ayudar?
Hola,
Tal vez pueda ser el modo de transferencia, ya que puede ser (si no me equivoco) de tipo binario o de tipo texto. Prueba con ambos a ver como te va.
Mira este metodo de la clase FTPSettings:
public void setFileTransferMode(char filetransfermode)
donde el modo puede ser ‘A’=ASCII, ‘I’=BINARY;
No entiendo como relacionar FTPSetting a mi codigo donde se lo asigno disculpa las molestia.
No lo he probado, pero intenta esto. FTPContext extiende de FTPSetting, entonces, trata se hacer una instancia de FTPContext setteando el valor de tranfer mode. Luego, a tu objeto Ftp setteale el objecto ftpcontext. Si no puedes asignarlo intenta esta otra opcion:
objeto_ftp.getContext().setFileTransferMode( … );