FTP ERRO: org.apache.commons.net.ftp.parser.ParserInitializationException (ao listar arquivos)

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:2358) at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2141) at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2188)

Bom amigos,
Eu fiz um programa para download de uma pasta em um ftp. Ele funcionava corretamente e de ontem pra cá começou a dar esse erro.
Alguém sabe me dizer o por que?

Obrigado!

caso o erro ainda persista, experimente isso:

	if(null == client.getSystemName()) {
		//use parserKey,pathName method signature
		 client.listFiles("UNIX",(String)null);
	} else {
		client.listFiles();
	}	

esse fix é porque no linux pelo que eu entendi fica nulo o nome do servidor e client.listFiles(“UNIX”,(String)null); arruma.

:wink:

falouz.

Ao amigo que usa o FTP do apache commons, uma pergunta: quais são os .jars necessários para usar o FTP?

Eu baixei o commons-net-ftp-current.jar mas está dando erro, dizendo que não encontra determinada classe.

Obrigado
Francisco

E qual a determinada classe :?:

Muitas vezes, pelo nome da classe dá para saber qual é o jar que falta. Por exemplo, se faltar algo como “org.apache.commons.logging” ou coisa parecida, você sabe que tem de baixar a Apache Commons Logging.

Segue o stacktrace:

java.lang.NoClassDefFoundError: org/apache/oro/text/regex/MalformedPatternException at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createUnixFTPEntryParser(DefaultFTPFileEntryParserFactory.java:169) at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createFileEntryParser(DefaultFTPFileEntryParserFactory.java:94) at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2358) at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2141) at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2188) at br.com.kooky.sikget.ui.EDIUI.testarCommonsFTP(EDIUI.java:250) at br.com.kooky.sikget.ui.EDIUI.access$1200(EDIUI.java:105) at br.com.kooky.sikget.ui.EDIUI$1.run(EDIUI.java:210) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at br.com.kooky.sikget.lib.contextmenu.MyEventQueue.dispatchEvent(MyEventQueue.java:31) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Caused by: java.lang.ClassNotFoundException: org.apache.oro.text.regex.MalformedPatternException at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) ... 17 more

org.apache.oro.* é um pacote de expressões regulares, que provavelmente só deveria ser necessário com o Java 1.3 ou anterior.

http://jakarta.apache.org/oro/

Era exatamente isso, agora o que eu não entendi foi isso “provavelmente só deveria ser necessário com o Java 1.3 ou anterior”.
Obrigado.

É que é assim: o ORO é um pacote muito antigo do Jakarta Apache que supria a falta de suporte a expressões regulares do Java 1.3 e anteriores. No Java 1.4 apareceu o pacote java.util.regex, que praticamente substituiu o uso do ORO. Alguns pacotes antigos (bem como aqueles que têm de suportar o Java 1.3, que não é tão desusado assim quanto parece) ainda precisam usar o ORO.

Obrigado amigo, entendi.

Teria algum exemplo de upload e download usando essa biblioteca?

Desculpe, fiz a pergunta sem olhar direito na API, já achei:

FTPFile[] files = ftp1.listFiles(); int i = 0; for (FTPFile file : files) { if (file.isFile()) { i++; String nome = file.getName(); Calendar data = file.getTimestamp(); Long tamanho = file.getSize(); String str = nome + " - " + new SimpleDateFormat("dd/MM/yyy HH:mm:ss").format(data.getTime()) + " - " + tamanho.toString(); String fileName = "C:\\Kooky\\SikGet\\"+nome; RandomAccessFile outfile = new RandomAccessFile(fileName, "rw"); FileOutputStream fileStream = new FileOutputStream(outfile.getFD()); boolean copiou = ftp1.retrieveFile(nome, fileStream); if(copiou){ System.out.println("Arquivo copiado: "+fileName); } } }