1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Duvidas com conexão de aplicativo android com FTP

Olá, sou novo em programação java e Android, e estou passando por um problemas na conexão, o único erro que me mostrado é o log que eu criei pra apontar caso a conexão não funcione.

Estou usando a API commons-net-3.3 da apache, não sei se mudou alguma coisa com relação as antigas e estou passando alguma coisa errada, ou mesmo com os métodos certos e o que estou passando está com a nomenclatura errada, Obrigado.

Desculpem a má edição, sou novo nisso e não sei criar os blocos de código. :p

segue os códigos:

  • Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.com.testftp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.RECORD_VIDEO"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />   
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="br.com.testftp.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  • Classe com os métodos
package br.com.testftp;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.SocketException;

import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class MetodosFTP {

    private static final String TAG = null;
    public FTPClient mFTPClient = null;



    //CONECTAR
    public boolean ConectaFTP(String host, String username, String password, int port){
          try {
              mFTPClient = new FTPClient();

              //Conectando com o Host
              mFTPClient.connect(host, port);

              //Checa o código de resposta, se for positivo, a conexão foi feita
              if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {

                  //Logando com username e senha
                  boolean status = mFTPClient.login(username, password);

              //Setando para o modo de transferência de Arquivos
              mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
              mFTPClient.enterLocalPassiveMode();
              Log.i("STATUS", "CONECTADO");
              return status;
              }
          } catch(Exception e) {
              Log.d(TAG, "Error: Impossível conectar ao host " + host);
          }

          return false;
      }

    //DESCONECTAR
    public boolean DesconectarFTP(){
        try {
            mFTPClient.logout();
            mFTPClient.disconnect();
            return true;
        } catch (Exception e) {
            Log.d(TAG, "Um erro ocorreu durante a desconexão do FTP");
        }

        return false;
    }

    //RETORNA DIRETORIO DE TRABALHO
    public String retornaDiretorioFTP()
    {
        try {
            String workingDir = mFTPClient.printWorkingDirectory();
            return workingDir;
        } catch(Exception e) {
            Log.d(TAG, "Erro: Impossível obter o diretório de trabalho");
        }

        return null;
    }

    //MUDA O DIRETORIO DE TRBALHO
    public boolean mudarDiretorioFTP(String caminho_dir)
    {
        try {
            mFTPClient.changeWorkingDirectory(caminho_dir);
        } catch(Exception e) {
            Log.d(TAG, "Erro: Impossível mudar o diretório para " + caminho_dir);
        }

        return false;
    }

    //IMPRIME A LISTA DOS ARQUIVOS E DIRETÓRIOS DE UM DETERMINADO CAMINHO
    public void imprimeListaArquivosLog(String caminho_dir)
       {
           try {
               FTPFile[] ftpFiles = mFTPClient.listFiles(caminho_dir);
               int length = ftpFiles.length;

               for (int i = 0; i < length; i++) {
                   String name = ftpFiles[i].getName();
                   boolean isFile = ftpFiles[i].isFile();

                   if (isFile) {
                       Log.i(TAG, "Arquivo : " + name);
                   }
                   else {
                       Log.i(TAG, "Diretório: " + name);
                   }
               }
           } catch(Exception e) {
               e.printStackTrace();
           }
       }

    // IMPRIME LISTA DE ARQUIVOS EM UMA TOAST
//    public void imprimeListaArquivosToast(String caminho_dir)
//       {
//           try {
//               FTPFile[] ftpFiles = mFTPClient.listFiles(caminho_dir);
//               int length = ftpFiles.length;
//               String list = "";
//     
//               for (int i = 0; i < length; i++) {
//                   String name = ftpFiles[i].getName();
//                   boolean isFile = ftpFiles[i].isFile();
//                    
//                   if(isFile){
//                       list += "Arquivo: "+name+" \n";
//                   }else{
//                       list += "Diretório: "+name+" \n";
//                   }               
//     
//               }
//                
//               Toast.makeText(this, list, Toast.LENGTH_SHORT).show();
//                
//           } catch(Exception e) {
//               e.printStackTrace();
//           }
//       }

    //CRIA DIRETÓRIO COM NOME E CAMINO ESPECIFICO
    public boolean criaDiretorioFTP(String novo_caminho_dir)
    {
        try {
            boolean status = mFTPClient.makeDirectory(novo_caminho_dir);
            return status;
        } catch(Exception e) {
            Log.d(TAG, "Erro: Impossível criar um diretório chamado " + novo_caminho_dir);
        }

     return false;
    }

    //DELETA UM DIRETÓRIO
    public boolean removeDirFTP(String caminho_dir)
    {
        try {
            boolean status = mFTPClient.removeDirectory(caminho_dir);
            return status;
        } catch(Exception e) {
            Log.d(TAG, "Erro: Impossível excluir o diretório chamado " + caminho_dir);
        }

        return false;
    }

    //DELETA UM ARQUIVO
    public boolean removeArquivoFTP(String caminho_arquivo)
    {
        try {
            boolean status = mFTPClient.deleteFile(caminho_arquivo);
            return status;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return false;
    }

    //RENOMEIA UM ARQUIVO - PASSAR NOME ECAMINHO COMPLETO
    public boolean renomearArquivo(String de, String para)
    {
        try {
            boolean status = mFTPClient.rename(de, para);
            return status;
        } catch (Exception e) {
            Log.d(TAG, "Impossível renomear: " + de+ " para: " + para);
        }

        return false;
    }

    //DOWNLOAD DE ARQUIVOS
    /**
      * caminho_arquivo_origem: Caminho completo do arquivo centro do FTP
      * destino_arquivo: Caminho completo do arquivo para o SDCard
      */
     public boolean downloadFTP(String caminho_arquivo_origem, String destino_arquivo)
     {
         boolean status = false;
         try {
             FileOutputStream desFileStream = new FileOutputStream(destino_arquivo);;
             status = mFTPClient.retrieveFile(caminho_arquivo_origem, desFileStream);
             desFileStream.close();

             return status;
         } catch (Exception e) {
             Log.d(TAG, "download failed - "+e);
         }

         return status;
     }


     //UPLOAD DE ARQUIVOS
     /**
      * caminho_arquivo_origem: Caminho completo do arquivo a ser upado no SDCard
      * nome_arquivo_destino: Caminho completo e nome com o qual o arquivo deve ser upado no FTP
      */

//     public void uploadFTP(String caminho_arquivo_origem, String nome_arquivo_destino){
//         try{
//             FileInputStream arqEnviar = new FileInputStream(caminho_arquivo_origem);
//             if (mFTPClient.storeFile(nome_arquivo_destino,arqEnviar))
//                 Toast.makeText(getBaseContext(), "Arquivo Enviado com Sucesso", Toast.LENGTH_LONG).show();
//             else
//                 Toast.makeText(getBaseContext(), "Erro ao Enviar", Toast.LENGTH_LONG).show();
//             }catch(Exception e){
//                 Log.d(TAG, "Error - "+e);
//             }
//     }

}
  • Evento passado a um botão na tela de conexão

MetodosFTP conectar = new MetodosFTP(); conectar.ConectaFTP("ftp.site.com.br","usuario","senha",21);

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android java ftp apache ou faça a sua própria pergunta.