Android多线程断点下载文件
2015-01-31 03:50
357 查看
1:AndroidManifest.xml中添加权限 <uses-permission android:name="android.permission.INTERNET" /> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>2:UI界面3:代码
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>2:UI界面3:代码
private Button stop;private EditText getURL;private Button run;private ProgressBar bar;// 获得sd卡路径
private final String root = Environment.getExternalStorageDirectory()
.getAbsolutePath() + File.separator;private Handler handler = new Handler() {@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
if (msg.what == 110) {
bar.setProgress(msg.arg1);
}
super.handleMessage(msg);
}};@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);run = (Button) this.findViewById(R.id.button1);stop = (Button) this.findViewById(R.id.button2);getURL = ((EditText) this.findViewById(R.id.edit_url));bar = (ProgressBar) this.findViewById(R.id.progressBar1);run.setOnClickListener(new OnClickListener() {@Override
public void onClick(View v) {
// TODO Auto-generated method stubnew Thread() {private byte[] bys = new byte[4 * 1024];private int len = -1;// 已读取
private int readsize = 0;// 总大小
private int countsize = 0;private Message msg = null;@Override
public void run() {
isno = true;
String geturl = getURL.getText().toString();
String fileName = root
+ geturl.substring(geturl.lastIndexOf("/") + 1,
geturl.length());
System.out.println(fileName);
FileOutputStream os = null;
InputStream input = null;
try {
File file = new File(fileName);
if (!file.exists())
file.createNewFile();
readsize = (int) file.length();
URL url = new URL(geturl);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
countsize = conn.getContentLength();// 获得文件总大小
input = conn.getInputStream();
os = new FileOutputStream(fileName, true);
System.out.println("countsize:" + countsize);
System.out.println("readsize:" + readsize);
if (countsize > readsize) {
if (readsize != 0)
input.skip(readsize);
while ((len = input.read(bys)) != -1) {
if (isCancelled()) {
os.write(bys);
readsize += len;
System.out.println(readsize * 100
/ countsize + "%");
msg = new Message();
msg.what = 110;
msg.arg1 = readsize * 100 / countsize;
handler.sendMessage(msg);
} else
break;
}
if (len == -1) {
msg = new Message();
msg.what = 110;
msg.arg1 = 0;
handler.sendMessage(msg);//清空读取条
}
}
os.flush();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}.start();
}
});//暂停下载
stop.setOnClickListener(new OnClickListener() {@Override
public void onClick(View v) {
// TODO Auto-generated method stub
isno = false;
}
});
}private boolean isno = true;private boolean isCancelled() {
// TODO Auto-generated method stub
return isno;
}
相关文章推荐
- Android--第四天(网络图片查看器,多线程下载,文件断点上传原理,Intent,Activity生命周期,广播,服务)
- Android多线程实现文件断点下载
- Android例子—Android文件下载--多线程断点下载的代码流程解析
- Android 多线程下载文件原理霸气解析介绍 (完结版)-----greendao数据库的存储,断点下载
- Android-Activity、Handler、ANR异常、多线程文件断点下载
- Android笔记(五):利用多线程可断点下载远程文件(已解决文件名含有中文)
- Android终端多线程断点下载文件
- android 下多线程断点下载服务器文件
- Android 多任务多线程断点下载
- android多线程断点下载——网络编
- android多线程断点下载
- 〖編程·Java〗Java 多线程断点下载文件
- Java 多线程断点下载文件
- Android 数据存储之五网络多线程断点下载
- Asp.net 2.0 文件下载[支持多线程, 断点续传功能](示例代码下载)
- [导入]Asp.net 2.0 文件下载[支持多线程, 断点续传功能](示例代码下载)
- Java 多线程断点下载文件
- Android实现文件下载断点续传
- android多线程断点下载——网络编