如何将文件从网站保存到SD卡

时间:2011-03-29 12:07:36

标签: android download sd-card

有谁知道如何通过wifi将文件从网络服务器(本地主机)保存到SD卡?

我正在对我的应用程序进行xml解析,为此我必须将一个xml文件从localhost下载到sdcard,然后标记解析。我很难将xml文件下载到SD卡。请指导我如何做到这一点..

3 个答案:

答案 0 :(得分:42)

您可以使用此方法将文件从互联网下载到SD卡:

public void DownloadFromUrl(String DownloadUrl, String fileName) {

   try {
           File root = android.os.Environment.getExternalStorageDirectory();               

           File dir = new File (root.getAbsolutePath() + "/xmls");
           if(dir.exists()==false) {
                dir.mkdirs();
           }

           URL url = new URL(DownloadUrl); //you can write here any link
           File file = new File(dir, fileName);

           long startTime = System.currentTimeMillis();
           Log.d("DownloadManager", "download begining");
           Log.d("DownloadManager", "download url:" + url);
           Log.d("DownloadManager", "downloaded file name:" + fileName);

           /* Open a connection to that URL. */
           URLConnection ucon = url.openConnection();

           /*
            * Define InputStreams to read from the URLConnection.
            */
           InputStream is = ucon.getInputStream();
           BufferedInputStream bis = new BufferedInputStream(is);

           /*
            * Read bytes to the Buffer until there is nothing more to read(-1).
            */
           ByteArrayBuffer baf = new ByteArrayBuffer(5000);
           int current = 0;
           while ((current = bis.read()) != -1) {
              baf.append((byte) current);
           }


           /* Convert the Bytes read to a String. */
           FileOutputStream fos = new FileOutputStream(file);
           fos.write(baf.toByteArray());
           fos.flush();
           fos.close();
           Log.d("DownloadManager", "download ready in" + ((System.currentTimeMillis() - startTime) / 1000) + " sec");

   } catch (IOException e) {
       Log.d("DownloadManager", "Error: " + e);
   }

}

您需要将以下权限添加到AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

答案 1 :(得分:1)

Sourav的答案还可以,但对于大文件大小,你应该在一个新的线程上实现它;因为在下载时,主线程正忙于下载文件。如果等待时间超过预期,系统将生成“无响应”错误。

为此,您可以使用“TaskAsync”或“IntentService

答案 2 :(得分:0)

我更喜欢构建soap服务器并从app到服务器以及接收XML的调用。或者,您可以创建一个生成XML的URL,并直接解析URL。

尝试详细了解LINK

希望我已经回答了这个问题。否则很乐意提供帮助,但我需要更详细的功能描述。