Android文件下载功能实现代码

本文实例为大家分享了Android文件下载功能的具体代码,供大家参考,具体内容如下

1.普通单线程下载文件:

直接使用URLConnection.openStream()打开网络输入流,然后将流写入到文件中!

public static void downLoad(String path,Context context)throws Exception
{
 URL url = new URL(path);
 InputStream is = url.openStream();
 //截取最后的文件名
 String end = path.substring(path.lastIndexOf("."));
 //打开手机对应的输出流,输出到文件中
 OutputStream os = context.openFileOutput("Cache_"+System.currentTimeMillis()+end, Context.MODE_PRIVATE);
 byte[] buffer = new byte[1024];
 int len = 0;
 //从输入六中读取数据,读到缓冲区中
 while((len = is.read(buffer)) > 0)
 {
  os.write(buffer,0,len);
 }
 //关闭输入输出流
 is.close();
 os.close();
}

2.普通多线程下载:

步骤:

  • 获取网络连接
  • 本地磁盘创建相同大小的空文件
  • 计算每条线程需从文件哪个部分开始下载,结束
  • 依次创建,启动多条线程来下载网络资源的指定部分
public class Downloader {
 //添加@Test标记是表示该方法是Junit测试的方法,就可以直接运行该方法了
  @Test
  public void download() throws Exception
  {
   //设置URL的地址和下载后的文件名
   String filename = "meitu.exe";
   String path = "http://10.13.20.32:8080/Test/XiuXiu_Green.exe";
   URL url = new URL(path);
   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
   conn.setConnectTimeout(5000);
   conn.setRequestMethod("GET");
   //获得需要下载的文件的长度(大小)
   int filelength = conn.getContentLength();
   System.out.println("要下载的文件长度"+filelength);
   //生成一个大小相同的本地文件
   RandomAccessFile file = new RandomAccessFile(filename, "rwd");
   file.setLength(filelength);
   file.close();
   conn.disconnect();
   //设置有多少条线程下载
   int threadsize = 3;
   //计算每个线程下载的量
   int threadlength = filelength % 3 == 0 ? filelength/3:filelength+1;
   for(int i = 0;i < threadsize;i++)
   {
    //设置每条线程从哪个位置开始下载
    int startposition = i * threadlength;
    //从文件的什么位置开始写入数据
    RandomAccessFile threadfile = new RandomAccessFile(filename, "rwd");
    threadfile.seek(startposition);
    //启动三条线程分别从startposition位置开始下载文件
    new DownLoadThread(i,startposition,threadfile,threadlength,path).start();
   }
   int quit = System.in.read();
   while('q' != quit)
   {
    Thread.sleep(2000);
   }
  }

 private class DownLoadThread extends Thread {
  private int threadid;
  private int startposition;
  private RandomAccessFile threadfile;
  private int threadlength;
  private String path;
  public DownLoadThread(int threadid, int startposition,
    RandomAccessFile threadfile, int threadlength, String path) {
   this.threadid = threadid;
   this.startposition = startposition;
   this.threadfile = threadfile;
   this.threadlength = threadlength;
   this.path = path;
  }
  public DownLoadThread() {}
  @Override
  public void run() {
   try
   {
    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(5000);
    conn.setRequestMethod("GET");
    //指定从什么位置开始下载
    conn.setRequestProperty("Range", "bytes="+startposition+"-");
    //System.out.println(conn.getResponseCode());
    if(conn.getResponseCode() == 206)
    {
     InputStream is = conn.getInputStream();
     byte[] buffer = new byte[1024];
     int len = -1;
     int length = 0;
     while(length < threadlength && (len = is.read(buffer)) != -1)
     {
      threadfile.write(buffer,0,len);
      //计算累计下载的长度
      length += len;
     }
     threadfile.close();
     is.close();
     System.out.println("线程"+(threadid+1) + "已下载完成");
    }
   }catch(Exception ex){System.out.println("线程"+(threadid+1) + "下载出错"+ ex);}
  }

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android中实现OkHttp上传文件到服务器并带进度

    在上一讲中 OkHttp下载文件并带进度条 中,我们知道怎样去下载文件了.那上传文件呢 一.编写服务器端 在上一讲服务器下新建UploadFileServlet,代码如下:然后重启服务器! @WebServlet("/UploadFileServlet") @MultipartConfig public class UploadFileServlet extends HttpServlet { private static final long serialVersionUID = 1

  • android中实现OkHttp下载文件并带进度条

    OkHttp是比较火的网络框架,它支持同步与异步请求,支持缓存,可以拦截,更方便下载大文件与上传文件的操作.下面我们用OkHttp来下载文件并带进度条! 相关资料: 官网地址:http://square.github.io/okhttp/ github源码地址:https://github.com/square/okhttp 一.服务器端简单搭建 可以参考搭建本地Tomcat服务器及相关配置这篇文章. 新建项目OkHttpServer,在WebContent目录下新建downloadfile目录

  • Android 将文件下载到指定目录的实现代码

    废话不多说了额,直接给大家贴代码了,具体代码如下所示: /** * 下载指定路径的文件,并写入到指定的位置 * * @param dirName * @param fileName * @param urlStr * @return 返回0表示下载成功,返回1表示下载出错 */ public int downloadFile(String dirName, String fileName, String urlStr) { OutputStream output = null; try { //

  • Android Uri和文件路径互相转换的实例代码

    在项目中需要用到将Uri转换为绝对路径,在网上找到一个方法,做个笔记 网上有不少方法,但是有的对4.4后的版本无效,这里的方法可以在4.4之后的版本将Uri转换为绝对路径 public class GetPathFromUri { /** * 专为Android4.4设计的从Uri获取文件绝对路径 */ public static String getPath(final Context context, final Uri uri) { final boolean isKitKat = Bui

  • android中用xml文件实现带边框背景效果的方法

    前言 在项目开发的过程中,有时我们会用到带边框的纯色背景图,类似效果如下: 一般的,我们会让设计给做个背景图,然后自己用.9处理一下,这样有些麻烦,我们可以简洁点实现,就是用xml文件. 下面给出一个范例: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" &g

  • Android开发实现文件关联方法介绍

    Android开发实现文件关联方法,做一个项目的时候,需要点击文件打开我们自己的app.首先讲一下点击普通文件打开app的方法,只需要三行代码,在app启动活动里加一个过滤器. <intent-filter> <category android:name="android.intent.category.LAUNCHER"> </category></action></intent-filter> <intent-fil

  • Android文件下载功能实现代码

    本文实例为大家分享了Android文件下载功能的具体代码,供大家参考,具体内容如下 1.普通单线程下载文件: 直接使用URLConnection.openStream()打开网络输入流,然后将流写入到文件中! public static void downLoad(String path,Context context)throws Exception { URL url = new URL(path); InputStream is = url.openStream(); //截取最后的文件名

  • C#实现文件上传及文件下载功能实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: public ActionResult Upload() { // var pathUrl = "http://" + Request.Url.Authority; var file = Request.Files["Filedata"]; var uploadFileName = file.FileName; string filePath = "/File/" + uploadFileNa

  • Android 验证码功能实现代码

    先给大家展示下效果图,如果大家感觉还不错,请参考实现代码 很简单的一个例子,点击刷新验证码,刷新当前显示的验证码,点击确定,如果输入的和显示的匹配,就会跳转到下一个界面中,这里只是实现了跳转,并没有进行其它的操作 好了 接下来就是代码了 首先看MainActivity的布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sche

  • Android 指纹功能实例代码

    最近在做项目的时候遇到了添加打开app图像解锁的功能,自己嘴欠说现在都用指纹功能,自己给自己挖了一个坑,真是没谁了 从网上看了一些资料,但是给我demo考虑的不是很多,设备支不支持都没考虑,如果支持的话是否添加过指纹也不知道,其实方法都很简单. 废话不多说,贴上工具类和使用方法 package com.tsm.test; import android.annotation.TargetApi; import android.app.Activity; import android.app.Key

  • Android打赏功能实现代码(支付宝转账)

    适用于个人开发者开发的APP中,让用户打赏给作者,实质上进行支付宝转账到指定账号的功能. 一.打开'支付宝'APP ,点击'收款'功能 ,将收款码(二维码)图片保存到手机上(进一步移到电脑上). 二.找一个在线二维码解析网页工具,解析一下收款码图片.将最后一个/后面的字符串复制出来,这是需要使用的部分 三.添加如下的一个工具类 public class AlipayUtil { // 支付宝包名 private static final String ALIPAY_PACKAGE_NAME =

  • jsp文件下载功能实现代码

    本文实例为大家分享了jsp实现文件下载功能的3种方法,供大家参考,具体内容如下 第一种.采用转发的方式: package cn.jbit.download.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.serv

  • JavaWeb文件下载功能实例代码

    在工作中遇到的一个下载文件的功能,自己将其抽取出来,代码简单,希望能帮到大家,好了,话不多说,上代码! public void downloadFile(File file, String downName, HttpServletRequest request, HttpServletResponse response) { OutputStream out = null; FileInputStream fin = null; BufferedInputStream bin = null;

  • asp.net 文件下载功能函数代码整理

    复制代码 代码如下: public void FileDownLoadDel(string fullFilename) { System.IO.Stream iStream = null; // Buffer to read 10K bytes in chunk: byte[] buffer = new Byte[10000]; // Length of the file: int length; // Total bytes to read: long dataToRead; // Ident

  • Struts2实现文件下载功能代码分享(文件名中文转码)

    struts2文件下载功能实现代码如下所示: Action文件 public class DownLoadAction extends ActionSupport { /** * */ private static final long serialVersionUID = 5879762231742395104L; private String fileName;//用户请求的文件名 private String inputPath;//下载资源的路径(在struts配置文件中设置) publ

  • java web response提供文件下载功能的实例讲解

    webapp项目的结构如下图: download.html文件的内容如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>资源下载:</h1> <p> 单纯地使用a标签时,只有浏览器不能解析的文

随机推荐