Java 需要下载pdf并存储在android的sd卡中
使用下面的代码,并且能够保存在应用程序缓存中,但不能保存在sd卡中。在sd卡中,保存的文件为0字节。无法获取准确的错误。提前感谢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();
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.
?你没提到图书馆吗?没有图书馆。。我刚刚粘贴了我的原始代码。让我来编辑。