Cómo hacer un simple ftp obtener archivo en Android

No puedo encontrar un ejemplo de un acceso FTP simple de un archivo en cualquier lugar, y la clase FTPClient (que un par de ejemplos utilizan) no aparece en el índice de clase de Android. Tengo http acceso trabajando, pero ¿cómo puedo hacer un simple FTP obtener? Todo lo que quiero hacer es descargar (por ejemplo): ftp://tgftp.nws.noaa.gov/data/observations/metar/stations/KABQ.TXT No debe requerir login, cambiar directorio, etc. URL a los métodos de acceso http no parecen funcionar.

Esto es similar a la pregunta en: incapaz de leer el archivo de ftp en android?

He intentado un simple:

StringBuilder response = new StringBuilder(); URLConnection ftpConn; try { URL netUrl = new URL("ftp://tgftp.nws.noaa.gov/data/observations/metar/stations/KABQ.TXT"); ftpConn = netUrl.openConnection(); BufferedInputStream bufRd = new BufferedInputStream(ftpConn.getInputStream()); int temp; while ((temp = bufRd.read()) != -1) { response.append(temp); } bufRd.close(); } catch (Exception e) { return "Failure"; } 

Pero obtiene una excepción en getInputStream: No se puede conectar al servidor: No se puede configurar el puerto de datos

Además, debe haber una forma más inteligente de extraer los datos del búfer de flujo de byte por byte, ¿no? No puedo encontrar eso tampoco.

Por último, tengo que hacer tanto http y ftp acceso, ¿hay alguna razón para no utilizar URLConnection para ambos tipos de acceso? O es mejor usar HttpConnection para http y URLConnection para ftp?

¡Gracias!

3 Solutions collect form web for “Cómo hacer un simple ftp obtener archivo en Android”

¡Uf! Finalmente lo conseguí. Me di por vencido de la manera sencilla que funciona en webOS y WPF / C # donde sólo puede hacer un ftp :: // … usted tiene que utilizar el paquete FTPClient.

Después de arreglar el acceso a la biblioteca (Proyecto | Propiedades | Java Build Path | Librerías | Añadir JAR …) Juguetee con las llamadas hasta que empezó a funcionar. Esta es la secuencia de mis llamadas FTPClient. No funcionaría hasta que lo configuré en modo pasivo.

  mFTPClient = new FTPClient(); mFTPClient.connect("tgftp.nws.noaa.gov"); mFTPClient.login("anonymous","nobody"); mFTPClient.enterLocalPassiveMode(); mFTPClient.changeWorkingDirectory("/data/forecasts/taf/stations"); InputStream inStream = mFTPClient.retrieveFileStream("KABQ.TXT"); InputStreamReader isr = new InputStreamReader(inStream, "UTF8"); 

Y también encontré en la web en algún lugar una respuesta a la pregunta 'byte by byte'. Esto parece funcionar para convertir un tipo de InputStream directamente al tipo String:

  String theStr = new Scanner(inStream).useDelimiter("\\A").next(); 

También busqué un ejemplo simple de la transferencia directa del ftp sin usar de libs del tercer partido. No encontré ninguno, así que publica mi solución aquí.

URLConnection utiliza por defecto el nombre de usuario 'anonymous' con contraseña vacía que no es aceptada por muchos servidores ftp, ya que requieren de correo electrónico como la contraseña para 'anonymous'.

Para usar el código siguiente en su aplicación, simplemente agregue try..catch y asegúrese de que la lectura de la secuencia no es un subproceso de UI de bloque.

 URL url = new URL("ftp://ftp.mozilla.org/README"); URLConnection cn = url.openConnection(); cn.setRequestProperty ("Authorization", "Basic " + Base64.encodeToString("anonymous:a@bc".getBytes(), Base64.DEFAULT)); final File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); FileOutputStream fos = new FileOutputStream(dir.getPath() + "/README"); InputStream is = cn.getInputStream(); int bytesRead = -1; byte[] buf = new byte[8096]; while ((bytesRead = is.read(buf)) != -1) { fos.write(buf, 0, bytesRead); } if(is != null)is.close(); if(fos != null){ fos.flush(); fos.close(); } 

Espero que esto le ahorrará tiempo.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.