Android:如何从服务器下载文件并将其保存在SD卡中的特定文件夹中

我的Android应用程序有一个需求。 我需要以编程方式下载并保存SD卡的特定文件夹中的文件。 我已经开发了源代码

和我的代码是

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); } } 

现在问题只是文件名为myclock_db.db的空文件保存在path中。 但我需要下载并保存文件的内容在特定的文件夹中。 尝试了几种方法来获取文件下载,但我不能。 任何人都可以帮我解决这个问题…

提前致谢…

Solutions Collecting From Web of "Android:如何从服务器下载文件并将其保存在SD卡中的特定文件夹中"

您的下载url不是任何文件的链接。 这是一个目录。 确保其文件存在。 同时检查你的logcat窗口的错误日志。 还有一个build议,它总是更好地做一个printStackTrace()在catch块而不是日志。 它给出了一个更详细的错误观点。

改变这一行:

  URL url = new URL("http://myexample.com/android/"); 

至:

  URL url = new URL("http://myexample.com/android/yourfilename.txt"); //some file url 

接下来,在catch块中,添加这一行:

 e.printStackTrace(); 

同样在目录path中,它应该是这样的:

 File dir = new File(root.getAbsolutePath() + "/mnt/sdcard/myclock/databases"); 

代替

 File dir = new File(root.getAbsolutePath() + "/myclock/databases"); 

接下来,请确保您已获得在Android清单中写入外部存储的权限。