public class FileDownloadUtils {private String sdPath;public FileDownloadUtils() {sdPath = Environment.getExternalStorageState() + "/";}/*** 在SD卡上创建文件** @param fileName* @return* @throws IOException*/public File createSDFile(String fileName) throws IOException {File file = new File(sdPath + fileName);file.createNewFile();return file;}/*** 在SD卡上创建目录** @param dirName* @return*/public File createSDDir(String dirName) {File dir = new File(sdPath + dirName);dir.mkdirs();return dir;}/*** 判断SD卡上的文件夹是否存在** @param fileName* @return*/public boolean isFileExist(String fileName) {File file = new File(sdPath + fileName);return file.exists();}/*** 将一个InputStream里面的数据写入到SD卡中** @param path* @param fileName* @param inputStream* @return*/public File write2SDFromInput(String path, String fileName, InputStream inputStream) {File file = null;OutputStream outputStream = null;try {createSDDir(path);file = createSDFile(path + fileName);outputStream = new FileOutputStream(file);byte[] buffer = new byte[4 * 1024];while ((inputStream.read(buffer)) != -1) {outputStream.write(buffer);}outputStream.flush();} catch (Exception e) {e.printStackTrace();} finally {try {outputStream.close();} catch (Exception e) {e.printStackTrace();}}return file;}public String getSdPath() {return sdPath;}public void setSdPath(String sdPath) {this.sdPath = sdPath;}
}
public class HttpDownloader {URL url = null;public String download(String urlStr) {StringBuilder sb = new StringBuilder();String line = null;BufferedReader br = null;try {url = new URL(urlStr);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));while ((line = br.readLine()) != null) {sb.append(line);}} catch (Exception e) {e.printStackTrace();} finally {try {br.close();} catch (Exception e) {e.printStackTrace();}}return sb.toString();}/*** 该函数返回整形 -1:代表下载文件出错   0:代表下载文件成功   1:代表文件已经存在** @param urlStr* @param path* @param fileName* @return*/public int downFile(String urlStr, String path, String fileName) {InputStream inputStream = null;try {FileDownloadUtils fileDownloadUtils = new FileDownloadUtils();if (fileDownloadUtils.isFileExist(path + fileName)) {return 1;} else {inputStream = getInputStreamFromUrl(urlStr);File resultFile = fileDownloadUtils.write2SDFromInput(path, fileName, inputStream);if (resultFile == null) {return -1;}}} catch (Exception e) {e.printStackTrace();} 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 httpURLConnection = (HttpURLConnection) url.openConnection();InputStream inputStream = httpURLConnection.getInputStream();return inputStream;}}

在Activity使用:

@Overridepublic void onClick(View v) {DownloadFileThread downloadFileThread = new DownloadFileThread(downloadUrl, FileUtil.getSDCardPath(), "html.zip");downloadFileThread.start();}@SuppressLint("HandlerLeak")private final Handler mHandler = new Handler() {@Overridepublic void handleMessage(@NonNull Message msg) {if (msg.what == -1) {Toast.makeText(FileOperateActivity.this, "下载文件出错", Toast.LENGTH_SHORT).show();Log.e(TAG, "下载文件出错");} else if (msg.what == 0) {Toast.makeText(FileOperateActivity.this, "下载文件成功", Toast.LENGTH_SHORT).show();Log.e(TAG, "下载文件成功");} else if (msg.what == 1) {Toast.makeText(FileOperateActivity.this, "代表文件已经存在", Toast.LENGTH_SHORT).show();Log.e(TAG, "代表文件已经存在");}}};class DownloadFileThread extends Thread {private final String download_file_url;private final String download_file_path;private final String download_file_fileName;public DownloadFileThread(String download_file_url, String download_file_path, String download_file_fileName) {this.download_file_url = download_file_url;this.download_file_path = download_file_path;this.download_file_fileName = download_file_fileName;}@Overridepublic void run() {HttpDownloader httpDownloader = new HttpDownloader();int result = httpDownloader.downFile(download_file_url, download_file_path, download_file_fileName);Message message = new Message();message.what = result;mHandler.sendMessage(message);}}

Android文件下载相关推荐

  1. Android 文件下载,根据url获取真正的文件名和后缀名(包括重定向的url)

    Android文件下载时,有时候我们需要根据url拿到要下载文件的名字和后缀. url分两种, 一种是静态url:即url后面就是文件名,例如:https://qd.myapp.com/myapp/q ...

  2. android 下载进度条代码实现,Android 文件下载进度条的实现

    Android 中很多地方都需要用到线程下载.下面我谢了个简单的下载图片的demo.望对你们有到帮助. 首先,配置权限, 在 AndroidManifest.xml里面的application节点下面 ...

  3. android文件下载功能实现,Android中DownloadManager实现文件下载实例详解

    Android中DownloadManager实现文件下载 下载 创建下载链接 DownloadManager.Request request = new DownloadManager.Reques ...

  4. android程序内下载文件,android文件下载代码 android程序 里如何编写下载代码

    android开发文件下载在手机报错 package cc.download; import android.app.Activity;import android.os我比任何人都懂你不会真的陪我到 ...

  5. android 下载进度条代码实现,Android文件下载进度条的实现代码

    搜索热词 main.xml: android:orientation="vertical" android:layout_width="fill_parent" ...

  6. android文件下载自动安装或打开

    最近做了几个项目,花点时间沉淀一下学到的知识. 多线程下载文件及UI刷新 断点续传下载文件网上的文章很多,在这里就不过多叙述了,在android里面控制UI的变化就比较麻烦了,用户在按下home键离开 ...

  7. Android文件下载——多线程下载

    Android文件多线程下载(二)中为了使调用更加简单,做了一个简单的封装.可以直接拷贝代码. 文章目录 1. 相关逻辑 1.1 HTTP首部信息 1.2 RandomAccessFile 1.3 编 ...

  8. android文件下载器(轻量级)——EasyFileDownload

    EasyFileDownloader 一个用于android中的轻量级文件下载器,特别适合应用内升级下载APK. A lightweight for use in the android file d ...

  9. Android 文件下载的三种基本方式

    1. 自己封装URLConnection 连接请求类 这种方式在Android 刚兴起的时候,很少下载封装框架,就自己封装了.虽然一般的文件都能下载,但这种方式缺点很多,不稳定或者各种各样的问题会出现 ...

  10. android文件下载含服务器端,制作http/https文件共享服务器的Android下载管理器

    我正在使用下载管理器的Android方下载来自不同来源的文件.现在我应该为这个应用程序创建一个服务器端.制作http/https文件共享服务器的Android下载管理器 的一切都在这里首先是为Andr ...

最新文章

  1. 简单几步解决企业USB端口隐患
  2. Eclipse搭建SpringCloud+SSM+Maven项目
  3. android 继承ListView实现滑动删除功能.
  4. Equals 和 == 的区别
  5. python list保存至csv文件
  6. 将 Java 作为入门编程语言有错吗?
  7. @程序员,你的技术过气了吗?
  8. C语言三位数的整数立方和,c语言求一个三位数正整数n各个数位上数据的立方和...
  9. 黑马程序员-随笔-我与程序员
  10. 算法的时间复杂度和空间复杂度-总结
  11. Exclusively Dark (ExDark) Image Dataset 数据集下载
  12. 1.松翰单片机:IO口配置
  13. 运维审计系统----堡垒机的部署
  14. opencv3_java 图像的修剪裁剪Trimming Rect
  15. luogu 2411 白银莲花池 luogu 1606 Lilypad Pond
  16. C/C++函数调用约定(基于X86架构下)
  17. 贪吃蛇之一维数组实现
  18. 计算器算贝塞尔公式_绝版应用!超级好用的计算器!
  19. CSI笔记【8】:基于MUSIC Algorithm的DoA/AoA估计以及MATLAB实现
  20. linux下微妙级别定时实现

热门文章

  1. nideshop小程序商城部署
  2. 如何查看dSYM文件的UUID?
  3. graphic头文件函数_C语言图形函数库总结graphics.h
  4. android手机如何设置提高网速,安卓手机设置网络速度的详细操作步骤
  5. 大力发展职业技术教育,高等教育也要跟动车高铁一样降降速了
  6. 支付宝支付提示 4006 ISV权限不足,建议在开发者中心检查签约是否已经生效
  7. 近期看到AlphaGo算法最清晰的解读
  8. 常见电脑故障自检指南(南城ZW)
  9. IP切换器是做什么用的?
  10. java多线程编程--模拟龟兔赛跑过程