Java - Java Apache Ftp

   
Vista:

Java Apache Ftp

Publicado por gonzalo (84 intervenciones) el 04/11/2015 21:17:00
al intentar recuperar la lista de archivos en un directorio ftp me manda este error (ojo, no es Sftp)

gracias por la ayuda.

salu2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
 
 
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.changeWorkingDirectory("/Files");
 
FTPFile[] files = ftpClient.listFiles(); <- - - - - -  el error es en esta linea
 
FTPFile[] files = ftpClient.listFiles("/Files"); <- - - - - -  aun si le indico el directorio

(error sin directorio)
org.apache.commons.net.ftp.parser.ParserInitializationException: Error initializing parser
at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createFileEntryParser(DefaultFTPFileEntryParserFactory.java:129)
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2359)
at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2142)
at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2188)
at Ftp.Download(Ftp.java:31)

(error con directorio)
org.apache.commons.net.ftp.parser.ParserInitializationException: Error initializing parser
at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createFileEntryParser(DefaultFTPFileEntryParserFactory.java:129)
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2359)
at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2142)
at Ftp.Download(Ftp.java:31)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Java Apache Ftp

Publicado por Juan R. (94 intervenciones) el 05/11/2015 01:16:12
Buenas Gonzalo

Has probado a seguir estos pasos de #blogueando:

https://hashblogeando.wordpress.com/2013/12/08/acceder-a-un-servidor-ftp-con-java-y-apache-commons-net/

Es que yo mirando uno y otro código ya encuentro algunas diferencias.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio

Java Apache Ftp

Publicado por Julio (4 intervenciones) el 05/11/2015 08:45:18
Hola Gonzalo.

Este es el código que estoy utilizando en producción, para descargar ficheros de diferentes directorios del FTP, en lo básico no difiere mucho del tuyo, simplemente la comprobación adicional: if (ftpClient.isRemoteVerificationEnabled()){ . Así que por el error que te da parace ser un problema con el acceso al FTP.

Yo no utilizo el método ftpClient.changeWorkingDirectory("/Files");, sino que siempre indico la ubicación de la que quiero leer en el método ftpClient.listFiles(ubicacionOrigen);.

Este es mi código por si te sirve de ayuda:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
String ubicacionOrigen = "/csv"
        FTPClient ftpClient;
        ftpClient = new FTPClient();
        boolean success = false;
        try {
            ftpClient.connect(server);
            ftpClient.login(usuarioFtp, claveFtp);
            if (ftpClient.isRemoteVerificationEnabled()){
                ftpClient.enterLocalPassiveMode();
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
                FTPFile[] ftpFiles = ftpClient.listFiles(ubicacionOrigen);
                for (FTPFile ftpFile : ftpFiles) {
					// Ejecución de mi código de procesado del fichero
				}
            }
            resultado = success;
        } catch (java.net.SocketException se) {
            resultado = false;
            // mensaOp("Error al conectar con el FTP");
            System.out.println("Error al conectar con el FTP: " + se);
        } catch (java.io.IOException ioe){
            resultado = false;
            // mensaOp("Error al conectar con el FTP");
            System.out.println("Error al conectar con el FTP: " + ioe);
        } finally {
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

Espero que te sea útil.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Java Apache Ftp

Publicado por gonzalo (84 intervenciones) el 05/11/2015 17:33:47
muchas garcias por el codigo Don Julio.

pero me da exactamente el mismo error en la misma linea que me da error en otros ejemplos.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
String Directorio="/Files";
 
FTPClient ftpClient = new FTPClient();
 
try
    {
    	ftpClient.connect(server,port);
    	ftpClient.login(user, pass);
    	if (ftpClient.isRemoteVerificationEnabled())
    	{
    		ftpClient.enterLocalPassiveMode();
    		ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    		FTPFile[] ftpFiles = ftpClient.listFiles(Directorio); < ------- esta es la linea 37
    		for (FTPFile ftpFile : ftpFiles)
    		{
    			System.out.println(ftpFile);
    		}
    	}
    	Resultado = success;
    } catch (java.net.SocketException se)
    {
    	Resultado = false;
    	// mensaOp("Error al conectar con el FTP");
    	System.out.println("Error al conectar con el FTP: " + se);
    } catch (java.io.IOException ioe)
    {
    	Resultado = false;
    	// mensaOp("Error al conectar con el FTP");
    	System.out.println("Error al conectar con el FTP: " + ioe);
    } finally
    {
    	try
    	{
    		if (ftpClient.isConnected())
    		{
    			ftpClient.logout();
    			ftpClient.disconnect();
    		}
    	} catch (IOException ex)
    	{
    		ex.printStackTrace();
    	}
    }

org.apache.commons.net.ftp.parser.ParserInitializationException: Error initializing parser
at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createFileEntryParser(DefaultFTPFileEntryParserFactory.java:129)
at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2359)
at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2142)
at Ftp.Download(Ftp.java:37)


acerca del comportamiento de este programa, funciono muy bien durante 3 meses sin dar problemas, cuando me pidieron que me pasara de Test a Files entonces empezo a mostrar este problema en ambos directorios.

he usado 5 codigos diferentes, el ultimo es el que puse al inicio de este Tema y todos presentan el mismo problema en la misma linea.

aqui lo curioso es que usando Filezilla si puedo bajar los archivos, por lo que estoy seguro de que mis credenciales estan bien.

otro dato acerca del comportamiento del server y este codigo: si hago 3 intentos (a pesar de que mis credenciales estan bien) el server bloquea mi cuenta y debo solicitar que me desbloqueen y me cambien mi password, lo que me quita como una hora al tener que esperar.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Julio

Java Apache Ftp

Publicado por Julio (4 intervenciones) el 06/11/2015 14:54:09
Hola Gonzalo.

Siento que no te haya servido, a mi inicialmente ya me parecía que tu código estaba bien, y como te comentaba todo parece un problema de acceso o permisos en el FTP, a mi me paso algo parecido,y si no recuerdo mal el problema fue que el usuario que me habían asignado no tenía habilitadas las opciones necesarias para el acceso desde Java.

Un saludo y que lo resuelvas pronto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet

Java Apache Ftp

Publicado por Lawliet (243 intervenciones) el 06/11/2015 18:19:49
Hola...

Te doy algunos tips espero te sean de utilidad.

1.- Realiza un Debug a tu aplicación ya que por el error que mencionas, posiblemente este teniendo problemas al momento de hacer una conversión entre tipos.
2.- Asegúrate que los mismos datos de conexión que usas en FileZilla, estén en tu código ya que posiblemente también puedes tener error de inicio de sesión, especialmente con el puerto, ya que el puerto para una conexión FTP es diferente a una conexión SFTP, aunque lo veo poco probable ya que si fuera este el caso entonces el error sería diferente, pero no perdemos nada con intentar.

Ahora bien, si gustas, puedes explicarnos el objetivo del programa y/o lo que intentas hacer y así darle una solución.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Java Apache Ftp

Publicado por gonzalo (84 intervenciones) el 06/11/2015 20:27:22
Gracias Lawliet

da la casualidad de que ahora hasta con el filezila se bloquea, asi que no creo que sea mi codigo, esto parece ser mas bien el servidor.

salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Java Apache Ftp

Publicado por gonzalo (84 intervenciones) el 06/11/2015 20:25:20
Gracias don Julio

lo voy a revisar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar