telefono - ¿Cómo descargar un archivo de un servidor y guardarlo en una carpeta específica en la tarjeta SD en Android?
como pasar los archivos del telefono ala tarjeta de memoria (1)
Tengo un requisito en mi aplicación de Android. Necesito descargar y guardar el archivo en una carpeta específica de la tarjeta SD mediante programación. He desarrollado el código fuente, que es
String DownloadUrl = "http://myexample.com/android/";
String fileName = "myclock_db.db";
DownloadDatabase(DownloadUrl,fileName);
// and the method is
public void DownloadDatabase(String DownloadUrl, String fileName) {
try {
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath() + "/myclock/databases");
if(dir.exists() == false){
dir.mkdirs();
}
URL url = new URL("http://myexample.com/android/");
File file = new File(dir,fileName);
long startTime = System.currentTimeMillis();
Log.d("DownloadManager" , "download url:" +url);
Log.d("DownloadManager" , "download file name:" + fileName);
URLConnection uconn = url.openConnection();
uconn.setReadTimeout(TIMEOUT_CONNECTION);
uconn.setConnectTimeout(TIMEOUT_SOCKET);
InputStream is = uconn.getInputStream();
BufferedInputStream bufferinstream = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(5000);
int current = 0;
while((current = bufferinstream.read()) != -1){
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream( file);
fos.write(baf.toByteArray());
fos.flush();
fos.close();
Log.d("DownloadManager" , "download ready in" + ((System.currentTimeMillis() - startTime)/1000) + "sec");
int dotindex = fileName.lastIndexOf(''.'');
if(dotindex>=0){
fileName = fileName.substring(0,dotindex);
}
catch(IOException e) {
Log.d("DownloadManager" , "Error:" + e);
}
}
Ahora el problema es solo un archivo vacío con el nombre de archivo myclock_db.db está guardando en la ruta. pero necesito descargar y guardar el contenido del archivo en la carpeta específica. Intenté varias formas de descargar el archivo, pero no puedo.
Su URL de descarga no es un enlace a ningún archivo. Es un directorio. Asegúrese de que es un archivo y existe. También revise su ventana logcat para los registros de errores. Una sugerencia más, siempre es mejor hacer un printStackTrace () en bloques catch en lugar de Logs. Su da una visión más detallada del error.
Cambia esta línea:
URL url = new URL("http://myexample.com/android/");
a:
URL url = new URL("http://myexample.com/android/yourfilename.txt"); //some file url
A continuación, en el bloque catch, agregue esta línea:
e.printStackTrace();
También en la ruta del directorio, debería ser algo como esto:
File dir = new File(root.getAbsolutePath() + "/mnt/sdcard/myclock/databases");
en lugar de
File dir = new File(root.getAbsolutePath() + "/myclock/databases");
A continuación, asegúrese de que ha adquirido permiso para escribir en el almacenamiento externo en el manifiesto de Android.