¿Cómo descargar un archivo desde un servidor y guardarlo en una carpeta específica en la tarjeta SD en Android?

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 progtwigción. Desarrollé 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 el archivo vacío con el nombre de archivo myclock_db.db se 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 sea un archivo y exista. También verifique la ventana de logcat para ver los registros de errores. Una sugerencia más, siempre es mejor hacer printStackTrace () en bloques catch en lugar de Logs. Es una vista más detallada del error.

Cambiar 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 

Luego, en el bloque catch, agrega 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 haber adquirido el permiso para escribir en el almacenamiento externo en el manifiesto de Android.