Как сохранить файл с сайта на SDCard - PullRequest
11 голосов
/ 29 марта 2011

Кто-нибудь знает, как сохранить файл с веб-сервера (локальный хост) на SDCard через Wi-Fi?

Я выполняю xml-разбор для своего приложения, и для этого мне нужно загрузить xml-файл с localhost на sdcard, а затем пометить синтаксический анализ.Я застрял с загрузкой XML-файла на SD-карту.Пожалуйста, объясните мне, как это сделать.

Ответы [ 3 ]

42 голосов
/ 29 марта 2011

Вы можете использовать этот метод для загрузки файла из Интернета на вашу 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 голос
/ 28 октября 2012

Ответ Сурава в порядке, но для файлов большого размера вы должны реализовать его в новом потоке;потому что во время загрузки основной поток занят загрузкой файла.Если время ожидания будет больше ожидаемого, система выдаст ошибку «Не отвечает».

Для этого вы можете использовать « TaskAsync » или « IntentService ».«

0 голосов
/ 29 марта 2011

Я предпочитаю строить мыльный сервер и делать вызовы от приложения к серверу и тем самым получать XML. Или, может быть, вы могли бы просто создать URL-адрес, который генерирует XML и который просто анализирует URL-адрес напрямую.

Попробуйте прочитать больше об этом ССЫЛКА

Надеюсь, у меня есть ответ на вопрос. В противном случае был бы рад помочь, но мне нужно более подробное описание функциональности.

...