Java 需要下载pdf并存储在android的sd卡中

Java 需要下载pdf并存储在android的sd卡中,java,android,file-io,sd-card,Java,Android,File Io,Sd Card,使用下面的代码,并且能够保存在应用程序缓存中,但不能保存在sd卡中。在sd卡中,保存的文件为0字节。无法获取准确的错误。提前感谢 final FileOutputStream f = new FileOutputStream(directory); URL u = new URL(fileURL); final HttpURLConnection c = (HttpURLConnection) u.openConnection();

使用下面的代码,并且能够保存在应用程序缓存中,但不能保存在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();
        }

使用以下代码下载任何类型的文件。我查过了。它就像一个符咒

请看这个

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

}
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.InputStream;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.os.AsyncTask;
导入android.os.Environment;
导入android.os.Handler;
导入android.util.Log;
公共类下载任务{
受保护的静态最终整数显示进度对话框=0x5;
受保护的静态最终整数停止\进度\对话框=0x6;
受保护的静态最终int网络故障=0x7;
连接服务器时受保护的静态最终整数问题=0x8;
受保护的静态最终下载int_SUCCESS=0x12;
受保护的静态最终下载int_失败=0X13;
私有URL;
私有字符串路径;
私有字符串fileName=“”;
私人语境;
私有字符串mReceivedURL=“”;
公共下载多媒体(上下文,
字符串mReceivedURL){
//TODO自动生成的构造函数存根
//这里接收的URL是您要下载的URL。
this.context=上下文;
this.mReceivedURL=mReceivedURL;
fileName=mReceivedURL.substring(mReceivedURL.lastIndexOf(“/”)+1,
mReceivedURL.length());
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
下载照片(mReceivedURL);
返回null;
}
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
mHandler.sendEmptyMessage(显示进度对话框);
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
mHandler.sendEmptyMessage(停止进程对话框);
}
公共void下载照片(字符串视频\u URL){
试一试{
url=新url(视频url);
HttpURLConnection c=(HttpURLConnection)url.openConnection();
c、 setRequestMethod(“GET”);
c、 设置输出(真);
c、 connect();
PATH=Environment.getExternalStorageDirectory()
+“/媒体/视频/”;
Log.d(“,”存储路径:“+path”);
文件=新文件(路径);
mkdirs()文件;
File outputFile=新文件(文件,文件名);
FileOutputStream fos=新的FileOutputStream(outputFile);
InputStream=c.getInputStream();
字节[]缓冲区=新字节[1024];
int len1=0;
而((len1=is.read(buffer))!=-1){
fos.写入(缓冲区,0,len1);
}
fos.close();
is.close();
mHandler.sendEmptyMessage(下载成功);
}捕获(例外e){
mHandler.sendEmptyMessage(下载失败);
Log.d(“标记”,“下载视频异常”+e.getMessage());
}
}
Handler mHandler=新处理程序(){
私有进程对话;
public void handleMessage(android.os.Message msg){
开关(msg.what){
案例显示进度对话框:
如果(progressDialog==null){
progressDialog=Utils.createProgressDialog(上下文);
progressDialog.show();
}否则{
progressDialog.show();
}
mHandler.removeMessages(显示进度对话框);
打破
案例停止\进度\对话框:
progressDialog.disclose();
mHandler.removeMessages(停止进程对话框);
打破
网络故障案例:
Utils.displaytoos(上下文、常量、无网络连接);
mHandler.removeMessages(网络故障);
打破
连接服务器时出现案例问题:
Utils.displayToast(上下文,
常量。连接服务器时出现问题);
mHandler.removeMessages(连接服务器时出现问题);
打破
成功案例:
Utils.displaytoos(上下文,“文件已下载”);
mHandler.removeMessages(下载成功);
打破
案例下载失败:
displaytoos(上下文,“错误,稍后再试”);
mHandler.sendEmptyMessage(下载失败);
打破
违约:
打破
}
};
};
}

同时,我会检查你的代码,看看有什么问题

您可以读取此链接()并对其进行自定义。
import com.plumup.
?你没提到图书馆吗?没有图书馆。。我刚刚粘贴了我的原始代码。让我来编辑。