Problemas com Apache FTP [RESOLVIDO]

5 respostas
furacao123

Aew galera estou tendo um problema com o apache FTP, fiz um teste em outro servidor Windows 2008 e funcionou normal, agora quando tento listar os arquivos de certo servidor me da o seguinte erro

Exception in thread "AWT-EventQueue-0" org.apache.commons.net.ftp.parser.ParserInitializationException: Unknown parser type: WIN32

eu consigo conectar normalmente mas na hora de chamar o metodo .listFiles() ele me da esse erro.

Alguem pode me ajudar é urgente.

Obrigado.

5 Respostas

M

Talvez se você colocasse aqui o trecho onde você se conecta e faz as requisições ficasse mais fácil de ajudar.

furacao123
try {
            FTPClient ftp = FTPConexao.conectar();
            System.out.println(ftp.printWorkingDirectory());

           
            System.out.println(ftp.printWorkingDirectory());

            String[] st = ftp.listNames();

            System.out.println(st.length);

            System.out.println(st[0]);


            if(null == ftp.getSystemName()) {
                      
               ftp.listFiles((String)null);

            } else {
                ftp.listFiles();             
            }

            System.out.println(ftp.getSystemName());



           /* FTPFile[] files = ftp.listFiles("/angelica");
            System.out.println(files.length);*/
        } catch (SocketException ex) {
            Logger.getLogger(teste.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(teste.class.getName()).log(Level.SEVERE, null, ex);
        }

Aqui o metodo de conexao

public static FTPClient conectar() throws SocketException, IOException {

        if (ftp == null) {
            ftp = new FTPClient();
            ftp.connect("ftp.xxxx.com.br");
            ftp.login("xxxx.com.br", "xxxx");
        }
        return ftp;
    }

Eu consigo conectar e listar os nomes normalmente o problema esta na hora que eu chamo o metodo listFiles, o servidor que estou tentando acessar eh Windows tanto que o getSystemName() é WIN32

ja testei em outro servidor e funciona normal o que pode ser

Erro

Exception in thread "AWT-EventQueue-0" org.apache.commons.net.ftp.parser.ParserInitializationException: Unknown parser type: WIN32
        at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createFileEntryParser(DefaultFTPFileEntryParserFactory.java:132)
        at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2263)
        at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2046)
        at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2093)
furacao123

Andei pesquisando e encontrei as classes de configuração mas mesmo assim nao deu certo

public class TesteFTP {

     public static void main(String[] args) throws SocketException, IOException {
         FTPClient ftp = new FTPClient();
         FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
 //        conf.setServerTimeZoneId("America/Denver");
         ftp.configure(conf);

         ftp.connect("ftp.coloradocontabilidade.com.br");
         checkReply(ftp, "FTP server refused connection.");

         System.out.println("Conectando-se");
         ftp.login("coloradoangelica.com.br", "24FebXTarA7d");
         checkReply(ftp, "FTP server refused login.");

         //System.out.println("Usuario: anonymous e senha em brancos");
         //ftp.changeWorkingDirectory("SakPatch");
         //System.out.println("Mudando para o diretório do sakray");

         String[] arquivos = ftp.listNames();
         checkReply(ftp, "FTP server refused listing names.");
          for (int i = 0; i < arquivos.length; i++) {
             System.out.println(arquivos[i]);
         }

         FTPFile[] files = ftp.listFiles();
         checkReply(ftp, "FTP server refused listing files");
         for (int i = 0; i < files.length; i++) {
             System.out.println(files[i].getName());
             System.out.println(files[i].getSize());
         }
     }

     private static void checkReply(FTPClient ftp, String message) throws IOException {
         System.out.println(ftp.getReplyString());
         int reply = ftp.getReplyCode();
         if (!FTPReply.isPositiveCompletion(reply)) {
             ftp.disconnect();
             System.err.println(message);
             System.exit(1);
         }
     }


}

mas dessa forma nao da erro, mas ele apenas lista os nomes no primeiro metodo

M

furacao123:

mas dessa forma nao da erro, mas ele apenas lista os nomes no primeiro metodo

E não é isso que esse trecho deveria fazer?

furacao123

Primeiro lista os nomes e depois os arquivos, e o laço faz mostrar os nomes de cada arquivo no caso só é executado o primeiro metodo

String[] arquivos = ftp.listNames();

Consegui resolver setando um ParserEngine, dei uma pesquisada mas ainda não entendi direito a necessidade de fazer isso, pois em outro servidor o programa acesava normalmente o ftp sem isso.
Era um servidor Linux mas testei tambem em outro windows e funcionou agora esse que preciso acessar tive que incluir esse parserEngine da seguinte forma

FTPClient ftp = FTPConexao.conectar();
FTPListParseEngine engine = ftp.initiateListParsing("org.apache.commons.net.ftp.parser.EnterpriseUnixFTPFileEntryParser", (String)null);
FTPFile[] listaArquivos = engine.getFiles();

mas cada vez que eu executo changeWorkingDirectory() eu preciso atribuir o valor novamento para o engine

engine = ftp.initiateListParsing("org.apache.commons.net.ftp.parser.EnterpriseUnixFTPFileEntryParser", ftp.printWorkingDirectory());

agora as duvidas são, porque eu tive que criar esse engine e como ele funcionou com essa config EnterpriseUnixFTPFileEntryParser se o servidor é WIN32 ?
se alguem puder esclarecer minhas duvidas agradeço, mas lembrando que assim resolvi o problema.

Obrigado.

Criado 1 de março de 2010
Ultima resposta 2 de mar. de 2010
Respostas 5
Participantes 2