Conexão FTP android

Bom dia!

Já programo a muito tempo ( uns 10 anos rs ), mas sou iniciante em android, alem de um completo desastre rs.
Estou tentando montar algumas funcoes de comunicacao com FTP com a lib do apache ftp client, mas estou penando, alguem tem algum ex de comunicacao, com conexao, upload e download e poderia me ajudar?
Obrigado!

Primeiro resultado do google foi esse tuturial.

Veja se ele pode te ajudar, caso tenha duvidas nao exite em postar aqui.

1 curtida

Obrigado, fiz esse, porem nao funcionou, entrei em contato com o thiago, me mandou o cod, mas tambem, não consegui fazer funcionar. no inicio postei aqui e me indicaram utilizar as threds, pois as chamadas estavam direta ( modo ativo ) e por isso sempre acionava uma exception, resolveu a exception, mas ainda nao conecta rs

Onde é o server ftp?


voce colocou a permissao de conexao a internet?
http://pt.androids.help/q24561

Boa noite Will,

Segue abaixo um código funcional para baixar arquivos do FTP. Ele está meio esquisito em alguns lugares pois adaptei de um código que eu havia feito. Mas creio que serve como base e vc pode adaptar as suas necessidades. Att.

Edit: Lembrando também de colocar as permissões no manifesto:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.STORAGE" />

public class AtualizacaoView extends AppCompatActivity {

    ProgressDialog dialog;
    boolean isOk = false;
    boolean baixouArquivo = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_atualizacao_view);
    }

    //Botao da tela para simular alguma chamada
    public void btnOnClick(View view){
        isOk = true;
        chamaThreadFtp();
    }

    //Cria nova thread
    private void chamaThreadFtp(){
        dialog = ProgressDialog.show(this, "Titulo", "Mensagem....",false,true);
        dialog.setCancelable(false);
        new Thread(){
            @Override
            public void run(){
                try{
                    conectaFtp();
                }catch (Exception e){}
            }
        }.start();
    }

    private void conectaFtp(){

        String strUrl   = "192.168.100.1";
        String strPorta = "20";

        int porta = 0;

        try{
            porta = Integer.parseInt(strPorta);
        }catch(Exception e){
            //Erro na porta
            isOk = false;
        }

        if (isOk) {
            FTPClient con = null;
            try {
                con = new FTPClient();
                con.connect(strUrl, porta);

                if (con.login("usuario", "senha")) {

                    con.enterLocalPassiveMode();
                    con.setFileType(FTP.BINARY_FILE_TYPE);
                    String diretorio = "/DiretorioDoFtp/aaaa/bbb/";


                    if(!checkDirectoryExistsAtt(diretorio, con)){
                        //Diretorio nao existe
                        isOk = false;
                    }

                    if(isOk) {
                        //Lista os arquivos do diretório
                        FTPFile[] arquivos = con.listFiles();

                        if(arquivos != null){
                            int length = arquivos.length;

                            for(int i = 0; i < length; ++i){
                                FTPFile f = arquivos[i];

                                if(f.isFile()){

                                    String nomeArquivo = f.getName();
                                    //Lista os arquivos do ftp
                                    nomeArquivo = nomeArquivo.trim();

                                    //Download do arquivo
                                    baixaArquivo(con, nomeArquivo);
                                }
                            }

                        }else{
                            //Não há arquivos no diretório
                        }
                    }
                    con.logout();
                    con.disconnect();
                }else {
                    //Senha-usuário inválido
                }
            } catch (Exception e) {
                //Alguma Exception
            }
        }

        finalizaFtp();
    }

    private void baixaArquivo(FTPClient con2, String nomeArquivo) {
           OutputStream outputStream = null;

            try{
                String diretorioAndroid = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
                String fileName = nomeArquivo;
                diretorioAndroid += fileName;
                final Uri uri = Uri.parse("file://" + diretorioAndroid);
                
                File file = new File(diretorioAndroid);

                //Diretório do arquivo no ftp
                String diretorio2 = "/DiretorioDoFtp/aaaa/bbb/"+nomeArquivo;

                outputStream = new BufferedOutputStream(new FileOutputStream(file));
                //Retorna true ou false se o arquivo foi baixado com sucesso
                baixouArquivo = con2.retrieveFile(diretorio2, outputStream);

            }catch(Exception e){
                //Alguma exception de download
            } finally {
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    }catch(Exception e){}
                }
            }

    }

    private void finalizaFtp(){
        runOnUiThread(new Runnable(){
            @Override
            public void run(){

                if(dialog != null) {
                    dialog.dismiss();
                }
                
                Toast.makeText(getContext(), "Concluído", Toast.LENGTH_LONG).show();
            }
        });
    }

    private boolean checkDirectoryExistsAtt(String dirPath, FTPClient ftpClient) throws IOException {
        boolean retorno = true;
        try {
            ftpClient.changeWorkingDirectory(dirPath);
            int returnCode = ftpClient.getReplyCode();
            if (returnCode == 550) {
                retorno = false;
            }
        }catch (Exception e){
            retorno = false;
        }
        return retorno;
    }
    
    private Context getContext(){
        return this;
    }
}

cara, Muito obrigado! vou testar agora!