android 下载网络文件

news/2024/11/23 1:38:50/

工具类

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class FileDownloader extends AsyncTask<String, Integer, String> {private Context context;private ProgressDialog progressDialog;public FileDownloader(Context context) {this.context = context;}// 执行下载前的准备工作@Overrideprotected void onPreExecute() {super.onPreExecute();progressDialog = new ProgressDialog(context);progressDialog.setMessage("Downloading file...");progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);progressDialog.setCancelable(false);progressDialog.show();}// 后台下载文件@Overrideprotected String doInBackground(String... params) {String fileUrl = params[0];String fileName = params[1];String filePath = Environment.getExternalStorageDirectory().getPath() + "/" + fileName;try {URL url = new URL(fileUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.connect();int fileLength = connection.getContentLength();InputStream input = new BufferedInputStream(url.openStream());FileOutputStream output = new FileOutputStream(filePath);byte[] data = new byte[1024];long total = 0;int count;while ((count = input.read(data)) != -1) {total += count;publishProgress((int) (total * 100 / fileLength));output.write(data, 0, count);}output.flush();output.close();input.close();} catch (IOException e) {Log.e("FileDownloader", "Error: " + e.getMessage());}return filePath;}// 更新下载进度@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);progressDialog.setProgress(values[0]);}// 下载完成后执行的操作@Overrideprotected void onPostExecute(String filePath) {super.onPostExecute(filePath);progressDialog.dismiss();// 在这里可以处理文件下载完成后的逻辑,比如打开文件等操作}
}

调用示例

String fileUrl = "http://www.example.com/file.pdf";
String fileName = "file.pdf";FileDownloader downloader = new FileDownloader(this);
downloader.execute(fileUrl, fileName);

注意事项

添加相应权限

<uses-permission android:name="android.permission.INTERNET"/>

http://www.ppmy.cn/news/1064569.html

相关文章

C++动态库编程 | C++名称改编、标准C接口、extern “C”、函数调用约定以及def文件详解

目录 1、导入导出声明 2、C函数名称改编与extern "C" 3、函数调用约定与跨语言调用 3.1、函数调用约定 3.2、跨语言调用dll库接口 3.3、函数调用约定以哪个为准 4、def文件的使用 5、在C程序中引用ffmpeg库中的头文件链接报错问题 6、最后 VC常用功能开发汇…

[LitCTF 2023]Flag点击就送!

进入环境后是一个输入框&#xff0c;可以提交名字 然后就可以点击获取flag&#xff0c;结果回显提示&#xff0c;需要获取管理员 可以尝试将名字改为admin 触发报错&#xff0c;说明可能存在其他的验证是否为管理员的方式 通过抓包后&#xff0c;在cookie字段发现了 特殊的东西…

C++中的Pimpl和RAII惯用法

一、PImpl 惯用法 PImpl&#xff08;Pointer to implementation&#xff09;是一种比较常见的C编程技巧&#xff0c;采用这种技巧能够减少代码依赖以及编译时间&#xff0c;具体思想是&#xff1a;将类的实现细节&#xff08;如一些非虚的私有成员&#xff09;从对象的表示中移…

如何在windows下使用masm和link对汇编文件进行编译

前言 32位系统带有debug程序&#xff0c;可以进行汇编语言和exe的调试。但真正的汇编编程是“编辑汇编程序文件(.asm)->编译生成obj文件->链接生成exe文件”。下面&#xff0c;我就来说一下如何在windows下使用masm调试&#xff0c;使用link链接。 1、下载相应软件 下载…

vue 孙组件给爷组件传递数据,本质层层传递

1 子传父 例子 vue 子组件 emit传递事件和事件数据给父组件_tenc1239的博客-CSDN博客 2 子传父 父传爷 层层套娃1中例子 2.1 定义传递事件 传值data // 孙组件 methods: {sendDataToGrandpa() {const data hello;this.$emit(sendDataToGrandpa, data);} } 2.2 中间父组件…

【CSS】定位 ( 子元素绝对定位 父元素相对定位 | 代码示例 )

一、子元素绝对定位 父元素相对定位 绝对定位 要和 带有定位 的 父容器 搭配使用 ; 子元素 使用绝对定位 , 父元素要使用 相对定位 ; 子元素使用 绝对定位 , 在布局中不会保留其位置 , 子元素完全依赖 父容器 的位置 , 此时就要求父容器必须稳定 , 如果父容器使用了 绝对布…

算力(Computing Power)

在云计算中&#xff0c;"算力"&#xff08;Computing Power&#xff09;是指计算资源的能力和容量。它是衡量云计算平台、服务或资源提供的计算性能和处理能力的一个关键指标。算力通常包括以下方面的考量&#xff1a; 计算能力&#xff1a; 算力衡量了云计算资源的处…

高并发保证接口幂等性方案

接口幂等的解决方案 什么是接口幂等性 接口幂等性是指无论调用多少次相同的接口请求&#xff0c;对系统的状态和数据产生的影响都是一致的。简而言之&#xff0c;幂等性保证了对同一个接口请求的重复调用不会产生额外的副作用或改变系统的状态。 在设计和实现接口时&#xf…