Estoy tratando de descargar un archivo desde una URL. Mi código no devuelve un error pero no puedo ver el archivo que tengo que descargar en mi almacenamiento interno. Aquí está mi código:

package com.example.downloadfile;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;
public class DownloadFile extends Activity {
private static String fileName = "al.jpg";
@Override
public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
tv.setText("This is download file program... ");
try {
URL url = new URL("http://www.fullissue.com/wp-content/uploads/2010/12/Adam-Lambert.jpg");
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
String PATH = Environment.getDataDirectory() + "/";
tv.append("\nPath > " + PATH);
Log.v("log_tag", "PATH: " + PATH);
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file, fileName);
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
fos.write(buffer, 0, len1);
}
fos.close();
is.close();
} catch (IOException e) {
Log.d("log_tag", "Error: " + e);
}
Log.v("log_tag", "Check: ");
tv.append("\nAnother append!");
this.setContentView(tv);
}
}

Soy nuevo en java y android dev, la respuesta sería muy apreciada, gracias!


Yo! He utilizado el ff. código de lugar. Esto funciona para mí. Gracias por toda su ayuda!

private static String fileName = "beautiful_galaxy - tarantula.jpg";
private static String fileURL = "http://apod.nasa.gov/apod/image/0903/tarantula2_hst_big.jpg";
try {
File root = Environment.getExternalStorageDirectory();
URL u = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
int lenghtOfFile = c.getContentLength();
FileOutputStream f = new FileOutputStream(new File(root + "/download/", fileName));
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
long total = 0;
while ((len1 = in.read(buffer)) > 0) {
total += len1; //total = total + len1
//publishProgress("" + (int)((total*100)/lenghtOfFile));
f.write(buffer, 0, len1);
}
f.close();
} catch (Exception e) {
Log.d("Downloader", e.getMessage());
}
  • Hmmmm… no creo que el directorio de datos es visible en un no-terminal rooteado.
  • He intentado utilizar el medio Ambiente.getExternalStorageDirectory() y tiene el mismo resultado, es todavía acerca de la tablet de enraizamiento (ya que estoy usando el tablet ahora)?
InformationsquelleAutor Kris | 2011-05-04

6 Comentarios

  1. 3

    Si se descarga el archivo a la Sdcard, a continuación, asegúrese de que su tarjeta sd está montado, el código de descarga de archivos a la sdcard, si sigue recibiendo problema me avisas.

    try { 
    URL URL = new URL(proporcionar cualquier URL); 
    HttpURLConnection c = (HttpURLConnection) dirección url.openConnection(); 
    c.setRequestMethod("GET"); 
    c.setDoOutput(true); 
    c.conectar(); 
    String PATH = medio Ambiente.getExternalStorageDirectory() 
    + "/download/"; 
    Registro.v(LOG_TAG, "RUTA:" + RUTA); 
    File archivo = new File(RUTA); 
    archivo.mkdirs(); 
    String fileName = "Prueba.mp3"; 
    Archivo outputFile = new Archivo(fileName); 
    FileOutputStream fos = new FileOutputStream(outputFile); 
    InputStream is = c.getInputStream(); 
    byte[] buffer = new byte[1024]; 
    int len1 = 0; 
    while ((len1 = es.read(buffer)) != -1) { 
    fos.write(buffer, 0, len1); 
    } 
    fos.close(); 
    es.close(); 
    //} 
    } catch (IOException e) { 
    Registro.d(LOG_TAG, "Error:" + e); 
    Pan tostado.makeText(myApp "error" + e.toString(), pan Tostado.LENGTH_LONG) 
    .show(); 
    } 
    

    mejor de la suerte 🙂

  2. 0

    Vi este hablar y el hombre dijo: usted debe utilizar el Apache HTTP de cliente y no el de java uno

    Aquí es un fragmento de código que tomar de la tutorial:

    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet("http://localhost/");
    HttpResponse response = httpclient.execute(httpget);
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    InputStream instream = entity.getContent();
    int l;
    byte[] tmp = new byte[2048];
    while ((l = instream.read(tmp)) != -1) {
    }
    }
    • ¿Tienes código de ejemplo para ti? gracias por tu respuesta
  3. 0

    Bastante seguro (como @dmon dijo) que no se puede escribir en el directorio de datos en la que la moda. Se desea:

    1. Uso Environment.getDownloadCacheDirectory () o Environment.getExternalStorageDirectory (). Echa un vistazo a el javadoc de http://developer.android.com/reference/android/os/Environment.html#getDataDirectory%28%29.
    2. Utilizando URLConnection() es bueno: es el estándar de java, y funciona bien.
    3. ¿Qué hacen los android registros de decir?
    • He intentado utilizar el medio Ambiente.getExternalStorageDirectory() de modo que el archivo descargado será almacenado a mi tarjeta sd pero aún así, no puedo ver el archivo descargado. Lo siento, no tengo android registros, hay otra manera de conseguir un error para esto, estoy compilando el archivo APK para luego transferirlo a mi tablet a través de la unidad flash.
    • Trate de usar esta opción para mostrar la excepción: Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); y ver lo que se muestra.
    • se muestra «sdcard/download/al.jpg» sin embargo, el archivo no existe…
  4. 0

    Compruebe los permisos siguientes en el archivo de Manifiesto:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  5. 0

    Tendrá un NetworkOnMainThreadException ahora. Busque en el registro de gato. Coloque su código de internet en un asynctask o hilo.

  6. -2

    Descarga de un archivo, yo uso el siguiente código:

    public boolean DownloadFile(String url, File outputFile) 
    {
    try {
    URL u = new URL(url);
    URLConnection conn = u.openConnection();
    int contentLength = conn.getContentLength();
    DataInputStream stream = new DataInputStream(u.openStream());
    byte[] buffer = new byte[contentLength];
    stream.readFully(buffer);
    stream.close();
    DataOutputStream fos = new DataOutputStream(new FileOutputStream(outputFile));
    fos.write(buffer);
    fos.flush();
    fos.close();
    } 
    catch(FileNotFoundException e) 
    {
    return false; 
    } 
    catch (IOException e) 
    {
    return false; 
    }
    return true;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here