如何从android中的url下载.docx文件?

时间:2014-09-03 09:52:24

标签: android url download docx

我正在尝试从android中的url下载this file并将文件保存在SD卡中....

3 个答案:

答案 0 :(得分:2)

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ProgressBar;

public class MainActivity extends Activity {

    private ProgressBar bar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bar=(ProgressBar)findViewById(R.id.progressBar1);
        new DownloadFileFromURL().execute("http://hrdevcontentapi.spanunit.com/000132/538/HCDocument/the_hatha_yoga_pradipika.docx");

    }

    /**
     * Background Async Task to download file
     * */
    class DownloadFileFromURL extends AsyncTask<String, String, String> {

        /**
         * Before starting background thread
         * Show Progress Bar Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        /**
         * Downloading file in background thread
         * */
        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                URL url = new URL(f_url[0]);
                URLConnection conection = url.openConnection();
                conection.connect();
                // getting file length
                int lenghtOfFile = conection.getContentLength();

                // input stream to read file - with 8k buffer
                InputStream input = new BufferedInputStream(url.openStream(), 8192);

                // Output stream to write file
                OutputStream output = new FileOutputStream("/sdcard/downloadedfile.docx");

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    // publishing the progress....
                    // After this onProgressUpdate will be called
                    publishProgress(""+(int)((total*100)/lenghtOfFile));

                    // writing data to file
                    output.write(data, 0, count);
                }

                // flushing output
                output.flush();

                // closing streams
                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }

            return null;
        }

        /**
         * Updating progress bar
         * */
        protected void onProgressUpdate(String... progress) {
            // setting progress percentage
            bar.setProgress(Integer.parseInt(progress[0]));
       }

        /**
         * After completing background task
         * Dismiss the progress dialog
         * **/
        @Override
        protected void onPostExecute(String file_url) {

            File targetFile = new File("/sdcard/downloadedfile.docx");
            Uri targetUri = Uri.fromFile(targetFile);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(targetUri, "application/*");
            startActivityForResult(intent, 100);
        }

    }
}

这是活动。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.test.MainActivity" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true" />

</RelativeLayout>

这是activity_main.xml

不要忘记添加以下权限:

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

有关详细信息,请点击此链接:http://www.androidhive.info/2012/04/android-downloading-file-by-showing-progress-bar/

答案 1 :(得分:0)

尝试使用DownloadManager,它非常易于使用,擅长长时间运行的下载任务。

答案 2 :(得分:0)

import java.io.FileInputStream;

import android.app.Activity;
import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ImageView;

public class Test extends Activity
 {
private static final String DL_ID = "downloadId";
private SharedPreferences prefs;
private DownloadManager dm;
private ImageView imageView;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    imageView = new ImageView(this);
    setContentView(imageView);
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    dm = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
}
@Override
public void onResume() {
  super.onResume();
    if(!prefs.contains(DL_ID)) {
      Uri resource = Uri.parse("http://asdf.com/big.jpg");
      DownloadManager.Request request = new DownloadManager.Request(resource);
      request.setAllowedNetworkTypes(Request.NETWORK_MOBILE | Request.NETWORK_WIFI);
      request.setAllowedOverRoaming(false);
      request.setTitle("Download Sample");
      long id = dm.enqueue(request);
      prefs.edit().putLong(DL_ID, id).commit();
    } else {
      queryDownloadStatus();
    }
    registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
@Override
public void onPause() {
  super.onPause();
  unregisterReceiver(receiver);
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
  queryDownloadStatus();
}
};
private void queryDownloadStatus() {
  DownloadManager.Query query = new DownloadManager.Query();
  query.setFilterById(prefs.getLong(DL_ID, 0));
  Cursor c = dm.query(query);
  if(c.moveToFirst()) {
    int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
    Log.d("DM Sample","Status Check: "+status);
    switch(status) {
    case DownloadManager.STATUS_PAUSED:
    case DownloadManager.STATUS_PENDING:
    case DownloadManager.STATUS_RUNNING:
      break;
    case DownloadManager.STATUS_SUCCESSFUL:
      try {
        ParcelFileDescriptor file = dm.openDownloadedFile(prefs.getLong(DL_ID, 0));
        FileInputStream fis = new ParcelFileDescriptor.AutoCloseInputStream(file);
        imageView.setImageBitmap(BitmapFactory.decodeStream(fis));
      } catch (Exception e) {
        e.printStackTrace();
      }
      break;
    case DownloadManager.STATUS_FAILED:
      dm.remove(prefs.getLong(DL_ID, 0));
      prefs.edit().clear().commit();
      break;
    }
  }
}

}

Ckeck Out This Link