0

使用下面的代码并能够保存在应用程序缓存中但不能保存在 sd 卡中..在 sd 卡中保存的文件为 0 字节无法得到确切的错误.....提前谢谢

final FileOutputStream f = new FileOutputStream(directory);
            URL u = new URL(fileURL);

            final HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);


            Thread thread = new Thread(new Runnable() {
                @SuppressWarnings("deprecation")
                @Override
                public void run() {
                    try {
                        c.connect();


                        InputStream in = c.getInputStream();
                        byte[] buffer = new byte[1024];
                        int len1 = 0;
                        int flag = 0;
                    while ((len1 = in.read(buffer)) != -1) {

                            f.write(buffer, 0, len1);
                            Log.d("Thread ", String.valueOf(len1));

                        }
                        f.close();

            thread.start();

        } catch (Exception e) {
            Toast.makeText(this, "In exception", Toast.LENGTH_LONG).show();
            e.printStackTrace();
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
4

1 回答 1

0

使用以下代码下载任何类型的文件。我已经检查过了。它就像一个魅力。

请检查一下。

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;



import android.app.ProgressDialog;
import android.content.Context;

    import android.os.AsyncTask;
    import android.os.Environment;
    import android.os.Handler;
    import android.util.Log;

    public class DownloadMultimedia extends AsyncTask<Void, Void, Void> {

    protected static final int SHOW_PROGRESS_DIALOG = 0x5;
    protected static final int STOP_PROGRESS_DIALOG = 0x6;
    protected static final int NETWORK_FAILURE = 0x7;
    protected static final int PROBLEM_IN_CONNECTING_SERVER = 0x8;
    protected static final int DOWNLOADED_SUCCESS = 0x12;
    protected static final int DOWNLOADED_FAILED = 0X13;

    private URL url;
    private String PATH;
    private String fileName = "";
    private Context context;
    private String mReceivedURL = "";



    public DownloadMultimedia(Context context, 
            String mReceivedURL) {
        // TODO Auto-generated constructor stub

// Here Received URL is your url to download.

        this.context = context;
        this.mReceivedURL = mReceivedURL;

        fileName = mReceivedURL.substring(mReceivedURL.lastIndexOf("/") + 1,
                mReceivedURL.length());
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
            downloadPhoto(mReceivedURL);
    return null;
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        mHandler.sendEmptyMessage(SHOW_PROGRESS_DIALOG);
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        mHandler.sendEmptyMessage(STOP_PROGRESS_DIALOG);
    }

    public void downloadPhoto(String Video_URL) {
        try {

            url = new URL(Video_URL);
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();
            PATH = Environment.getExternalStorageDirectory()
                    + "/Media/Videos/";

            Log.d("", "the path to store : " + PATH);

            File file = new File(PATH);
            file.mkdirs();

            File outputFile = new File(file, fileName);
            FileOutputStream fos = new FileOutputStream(outputFile);
            InputStream is = c.getInputStream();
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);
            }
            fos.close();
            is.close();


            mHandler.sendEmptyMessage(DOWNLOADED_SUCCESS);
        } catch (Exception e) {
            mHandler.sendEmptyMessage(DOWNLOADED_FAILED);
            Log.d("TAG", " downloadVideo exception " + e.getMessage());
        }
    }


    Handler mHandler = new Handler() {

        private ProgressDialog progressDialog;

        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case SHOW_PROGRESS_DIALOG:
                if (progressDialog == null) {
                    progressDialog = Utils.createProgressDialog(context);
                    progressDialog.show();
                } else {
                    progressDialog.show();
                }
                mHandler.removeMessages(SHOW_PROGRESS_DIALOG);
                break;

            case STOP_PROGRESS_DIALOG:
                progressDialog.dismiss();
                mHandler.removeMessages(STOP_PROGRESS_DIALOG);
                break;

            case NETWORK_FAILURE:
                Utils.displayToast(context, Constant.NO_NETWORK_CONNECTION);
                mHandler.removeMessages(NETWORK_FAILURE);
                break;

            case PROBLEM_IN_CONNECTING_SERVER:
                Utils.displayToast(context,
                        Constant.PROBLEM_IN_CONNECTING_SERVER);
                mHandler.removeMessages(PROBLEM_IN_CONNECTING_SERVER);
                break;

            case DOWNLOADED_SUCCESS:
                Utils.displayToast(context, "File has been downloaded");
                mHandler.removeMessages(DOWNLOADED_SUCCESS);
                break;

            case DOWNLOADED_FAILED:
                Utils.displayToast(context, "Error, Try again later");
                mHandler.sendEmptyMessage(DOWNLOADED_FAILED);
                break;

            default:
                break;
            }
        };
    };

}

同时,我将检查您的代码并检查其中有什么问题。

于 2013-11-07T10:00:15.990 回答