Download de Arquivos

Boa noite,

Estou apanhando ao tentar fazer download de um arquivo jar, alguem tem alguma sugestão.


CtrlFtp ctl = new CtrlFtp();

// "/downloads/rt.jar" --- caminho ftp
// "/rt.jar" --- caminho local
ctl.BaixarArquivo("/downloads/rt.jar", "/rt.jar");

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package atualizador.controllers;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import seguranca.controllers.EncriptaSenha;

/**
 *
 * @author tiagokochenborger
 */
public class CtrlFtp {
    
    private EncriptaSenha cript = new EncriptaSenha();
    
    java.util.ResourceBundle dadoFtp = java.util.ResourceBundle.getBundle("atualizador.resources/dadosFTP"); // NOI18N
    
    private FTPClient ftp = new FTPClient();  
        
    String nomeArquivo = null; 
    
    private void ConectaFtp()
    {
        try {  
            ftp.connect( dadoFtp.getString("ftp") );
            
            //verifica se conectou com sucesso!  
            if( FTPReply.isPositiveCompletion( ftp.getReplyCode() ) ) {  
                ftp.login( cript.descripta(dadoFtp.getString("usuario")), cript.descripta(dadoFtp.getString("senha")));  
            } else {  
                //erro ao se conectar  
                ftp.disconnect();  
                System.out.println("Conexão recusada");  
                System.exit(1);  
            }
            
        } catch (SocketException ex) {
            Logger.getLogger(CtrlFtp.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(CtrlFtp.class.getName()).log(Level.SEVERE, null, ex);
        }
            
    }
    
    private void tipoArquivo(String caminhoNome)
    {
        String v[] = caminhoNome.split("\\.");
        
        String ext=v[1];
        
        try {
            if(ext.equals("txt"))
            {
                ftp.setFileTransferMode(org.apache.commons.net.ftp.FTP.ASCII_FILE_TYPE);    
                ftp.setFileType( FTPClient.ASCII_FILE_TYPE );
                
            }
            else if (ext.equals("jar"))
            {
                ftp.setFileTransferMode(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);  
            }
            
        } catch (IOException ex) {
            Logger.getLogger(CtrlFtp.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private void DesconectaFtp()
    {
        try {
            ftp.logout();
            ftp.disconnect();
        } catch (IOException ex) {
            Logger.getLogger(CtrlFtp.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private void EnviaArquivo(InputStream is)
    {
        try {
            //faz o envio do arquivo  
            ftp.storeFile( nomeArquivo, is );
                    System.out.println("Arquivo "+nomeArquivo+" enviado com sucesso!");
        } catch (IOException ex) {
            Logger.getLogger(CtrlFtp.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void BaixarArquivo(String arquivoFile, String caminhoNome)
    {
        ConectaFtp();
        
        boolean success=false;
        OutputStream outputStream1 = null;
        
        tipoArquivo(caminhoNome);
        
        String remoteFile = arquivoFile;
        File downloadFile = new File(caminhoNome);
                
                
        try {
            if(dadoFtp.getString("tipo").equals("noStream"))
            {

                // APPROACH #1: using retrieveFile(String, OutputStream)
                outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile));
                success = ftp.retrieveFile(remoteFile, outputStream1);
              
                System.out.println(success);
                if (success) {
                    System.out.println("File #1 has been downloaded successfully.");
                }
                outputStream1.close();
                
            }
            else
            {
        
                OutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(downloadFile));
                InputStream inputStream = ftp.retrieveFileStream(remoteFile);
                byte[] bytesArray = new byte[40096];
                int bytesRead = -1;
                while ((bytesRead = inputStream.read(bytesArray)) != -1) {
                    outputStream2.write(bytesArray, 0, bytesRead);
                }
                success = ftp.completePendingCommand();
                if (success) {
                    System.out.println("File #2 has been downloaded successfully.");
                }
                outputStream2.close();
                inputStream.close();
            }
        } catch (IOException ex) {
            Logger.getLogger(CtrlFtp.class.getName()).log(Level.SEVERE, null, ex);
        } 
        
        DesconectaFtp();
    }
    
    
}

Tem log, erro, resultado do que ta executando?

simplesmente não baixa o arquivo fica com zero

Vc consegue debuggar o codigo pra ver o que está acontecendo?

Seria o jeito mais fácil de tentar resolver…

Verifique se ele está entrando corretamente em:

            else if (ext.equals("jar"))  
            {  
                ftp.setFileTransferMode(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);  
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);    
            }  

Verifique se está sendo feito a conexão corretamente.

Tente listar os arquivos em vez de baixar para verificar se o problema está em baixar ou conectar.

Dá uma olhada aqui:

http://commons.apache.org/proper/commons-net//apidocs/org/apache/commons/net/ftp/FTPClient.html

Esta entrando no jar!

também conecta e lista.

Coloque um

outputStream2.flush();

logo depois desse loop:

while ((bytesRead = inputStream.read(bytesArray)) != -1) {  
        outputStream2.write(bytesArray, 0, bytesRead);  
}

e teste.