热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

android实现文件下载功能

android 在网络上下载文件,供大家参考,具体内容如下 步骤 : 1.使用HTTP协议下载文件 - 创建一个Http

android 在网络上下载文件,供大家参考,具体内容如下

步骤 :

1.使用HTTP协议下载文件

- 创建一个HttpURLConnection对象 : HttpURLConnection urlCOnn= (HttpURLConnection) url.openConnection();
- 获取一个InputStream对象 : urlConn.getInputStream()
- 访问网络的权限 : android.permission.INTERNET

2.将下载的文件写入SDCARD
- 得到当前设备SD卡的目录 : Environment.getExternalStrageDirectory()
- 访问SD卡的权限 : android.permission.WRITE_EXTERNAL_STORAGE

代码 : 

activity_main.xml

 
 
  

MainActivity.java

package com.chay.download; 
 
import com.chay.utils.HttpDownloader; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
 
public class MainActivity extends Activity { 
   
  String urlStr_txt = "http://192.168.56.1:8080/mp3/wan.lrc"; 
  String urlStr_mp3 = "http://192.168.56.1:8080/mp3/wan.mp3"; 
  String path = "mp3/"; 
  String fileName = "wan.mp3"; 
  private Button downloadTxtButton; 
  private Button downloadMp3Button; 
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    downloadTxtButton = (Button) findViewById(R.id.btn_txt); 
    downloadTxtButton.setOnClickListener(new DownloadTxtListener()); 
    downloadMp3Button = (Button) findViewById(R.id.btn_mp3); 
    downloadMp3Button.setOnClickListener(new DownloadMp3Listener()); 
  } 
 
  //下载歌词文件按钮监听器 
  class DownloadTxtListener implements OnClickListener { 
    @Override 
    public void onClick(View v) { 
      Thread t = new DownloadTxtThread();  
      t.start(); 
      System.out.println("txt--->"); 
    } 
  } 
  //下载歌词文件线程 
  class DownloadTxtThread extends Thread{ 
    @Override 
    public void run() { 
      HttpDownloader httpDownloader = new HttpDownloader(); 
      String lrc = httpDownloader.download(urlStr_txt); 
      System.out.println(lrc); 
    } 
  } 
  //下载MP3文件按钮监听器 
  class DownloadMp3Listener implements OnClickListener { 
    @Override 
    public void onClick(View v) { 
      Thread h = new DownMp3Thread(); 
      h.start(); 
      System.out.println("mp3--->"); 
    } 
  } 
  //下载MP3文件线程 
  class DownMp3Thread extends Thread{ 
    @Override 
    public void run() { 
      HttpDownloader httpDownloader = new HttpDownloader(); 
      int result = httpDownloader.downFile(urlStr_mp3, path, fileName); 
      System.out.println(result); 
    } 
  }   
} 

工具类:

HttpDownloader.java

package com.chay.utils; 
 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
 
public class HttpDownloader { 
  private URL url = null; 
 
  /** 
   * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容 
   * 1.创建一个URL对象 
   * 2.通过URL对象,创建一个HttpURLConnection对象 
   * 3.得到InputStram 
   * 4.从InputStream当中读取数据 
   * @param urlStr 
   * @return 
   */ 
  public String download(String urlStr) { 
    StringBuffer sb = new StringBuffer(); 
    String line = null; 
    BufferedReader buffer = null; 
    try { 
      // 创建一个URL对象 
      url = new URL(urlStr); 
      // 创建一个Http连接 
      HttpURLConnection urlCOnn= (HttpURLConnection) url.openConnection(); 
      // 使用IO流读取数据 
      buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 
      while ((line = buffer.readLine()) != null) { 
        sb.append(line); 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } finally { 
      try { 
        buffer.close(); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
    return sb.toString(); 
  } 
 
  /** 
   * 该函数返回整形 -1:代表下载文件出错   0:代表下载文件成功   1:代表文件已经存在 
   */ 
  public int downFile(String urlStr, String path, String fileName) { 
    InputStream inputStream = null; 
    try { 
      FileUtils fileUtils = new FileUtils(); 
       
      if (fileUtils.isFileExist(path + fileName)) { 
        return 1; 
      } else { 
        inputStream = getInputStreamFromUrl(urlStr); 
        File resultFile = fileUtils.write2SDFromInput(path,fileName, inputStream); 
        if (resultFile == null) { 
          return -1; 
        } 
      } 
    } catch (Exception e) { 
      e.printStackTrace(); 
      return -1; 
    } finally { 
      try { 
        inputStream.close(); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
    return 0; 
  } 
 
  /** 
   * 根据URL得到输入流 
   * 
   * @param urlStr 
   * @return 
   * @throws MalformedURLException 
   * @throws IOException 
   */ 
  public InputStream getInputStreamFromUrl(String urlStr) 
      throws MalformedURLException, IOException { 
    url = new URL(urlStr); 
    HttpURLConnection urlCOnn= (HttpURLConnection) url.openConnection(); 
    InputStream inputStream = urlConn.getInputStream(); 
    return inputStream; 
  } 
} 

FileUtils.java

package com.chay.utils; 
 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
import android.os.Environment; 
 
public class FileUtils { 
  private String SDPATH; 
 
  public String getSDPATH() { 
    return SDPATH; 
  } 
  public FileUtils() { 
    //得到当前外部存储设备的目录 
    // /SDCARD 
    SDPATH = Environment.getExternalStorageDirectory() + "/"; 
  } 
  /** 
   * 在SD卡上创建文件 
   * 
   * @throws IOException 
   */ 
  public File creatSDFile(String fileName) throws IOException { 
    File file = new File(SDPATH + fileName); 
    file.createNewFile(); 
    return file; 
  } 
   
  /** 
   * 在SD卡上创建目录 
   * 
   * @param dirName 
   */ 
  public File creatSDDir(String dirName) { 
    File dir = new File(SDPATH + dirName); 
    dir.mkdirs(); 
    return dir; 
  } 
 
  /** 
   * 判断SD卡上的文件夹是否存在 
   */ 
  public boolean isFileExist(String fileName){ 
    File file = new File(SDPATH + fileName); 
    return file.exists(); 
  } 
   
  /** 
   * 将一个InputStream里面的数据写入到SD卡中 
   */ 
  public File write2SDFromInput(String path,String fileName,InputStream input){ 
    File file = null; 
    OutputStream output = null; 
    try{ 
      creatSDDir(path); 
      file = creatSDFile(path + fileName); 
      output = new FileOutputStream(file); 
      byte buffer [] = new byte[4 * 1024]; 
      while((input.read(buffer)) != -1){ 
        output.write(buffer); 
      } 
      output.flush(); 
    } 
    catch(Exception e){ 
      e.printStackTrace(); 
    } 
    finally{ 
      try{ 
        output.close(); 
      } 
      catch(Exception e){ 
        e.printStackTrace(); 
      } 
    } 
    return file; 
  } 
} 

 如果不能下载,请先将windows防火墙关闭。


推荐阅读
  • 在Notepad++中配置Markdown语法高亮及实时预览功能
    本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
  • [附源码]计算机毕业设计JAVAjsp医药管理信息系统
    [附源码]计算机毕业设计JAVAjsp医药管理信息系统项目运行环境配置:Jdk1.8Tomcat7.0MysqlHBuilderX(Webstor ... [详细]
  • 3DSMAX制作超现实的体育馆模型
    这篇教程是向脚本之家的朋友介绍3DSMAX制作超现实的体育馆模型方法,教程制作出来的体育馆模型非常地不错,不过教程有点难度,需要有一定基础的朋友学习,推荐到脚本之家,喜欢的朋友可 ... [详细]
  • 本文介绍了如何在AngularJS应用中使用ng-repeat指令创建可单独点击选中的列表项,并详细描述了实现这一功能的具体步骤和代码示例。 ... [详细]
  • 在项目冲刺的最后一天,团队专注于软件用户界面的细节优化,包括调整控件布局和字体设置,以确保界面的简洁性和用户友好性。 ... [详细]
  • JavaScript 页面卸载事件详解 (onunload)
    当用户从页面离开时(如关闭页面或刷新页面),会触发 onunload 事件,此时可以执行预设的脚本。需要注意的是,不同的浏览器对 onunload 事件的支持程度可能有所不同。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 探讨如何在映射文件中处理重复的属性字段,以避免数据操作时出现错误。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
author-avatar
北路新华
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有