Android从服务器上下载文件
16lz
2021-01-25
废话就不多说了直接看下怎么实现
1.添加相关的权限,设备API大于6.0时需要主动申请权限
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" />
//设备API大于6.0时,主动申请权限 private void requestPermission(Activity context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 0); } } }
2.连接服务器获取文件
/** * 从服务器下载文件 * @param path 下载文件的地址 * @param FileName 文件名字 */ public static void downLoad(final String path, final String FileName) { new Thread(new Runnable() { @Override public void run() { try { URL url = new URL(path); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setReadTimeout(5000); con.setConnectTimeout(5000); con.setRequestProperty("Charset", "UTF-8"); con.setRequestMethod("GET"); if (con.getResponseCode() == 200) { InputStream is = con.getInputStream();//获取输入流 FileOutputStream fileOutputStream = null;//文件输出流 if (is != null) { FileUtils fileUtils = new FileUtils(); fileOutputStream = new FileOutputStream(fileUtils.createFile(FileName));//指定文件保存路径,代码看下一步 byte[] buf = new byte[1024]; int ch; while ((ch = is.read(buf)) != -1) { fileOutputStream.write(buf, 0, ch);//将获取到的流写入文件中 } } if (fileOutputStream != null) { fileOutputStream.flush(); fileOutputStream.close(); } } } catch (Exception e) { e.printStackTrace(); } } }).start(); }
3.创建文件保存路径
public class FileUtils { private String path = Environment.getExternalStorageDirectory().toString() + "/shidoe"; public FileUtils() { File file = new File(path); /** *如果文件夹不存在就创建 */ if (!file.exists()) { file.mkdirs(); } } /** * 创建一个文件 * @param FileName 文件名 * @return */ public File createFile(String FileName) { return new File(path, FileName); }}
4.下载示例
downLoad("http://www.shidoe.com/shidoe/Edition/upfile/04.png", "che.png");//下载完成后就可以在手机目录里查看到了
5.动态获取需要保存文件的文件名
//获取 / 最后一次出现的位置,然后位置+1截取剩余的就是文件名了String s = "http://www.shidoe.com/shidoe/Edition/upfile/04.png"; int i = s.lastIndexOf("/"); String FileName= s.substring(i + 1);
6.加载刚下载好的图片显示在界面上还是非常easy的
private void loadImage() { String path = Environment.getExternalStorageDirectory().toString() + "/shidoe"; try { Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(new File(path, "che.png"))); iv.setImageBitmap(bmp); } catch (FileNotFoundException e) { e.printStackTrace(); } }
如果帮到了你就帮忙顶一下吧
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Webview之H5页面调用android的图库及文件管理
- repo下载android出现fatal: Unable to find remote helper for '
- android启动中遇到的2个问题
- android文件的写入与读取---简单的文本读写context.openFileInpu
- android--使用NDK-build生成so