android 下载文件,file的读写应用
先看代码:
public class MainActivity extends AppCompatActivity {
String TAG = MainActivity.class.getCanonicalName();
private ImageView imageview;
private Button load;
String path = "http://img06.tooopen.com/images/20161120/tooopen_sl_187242346264.jpg";
private Bitmap bitmap;
private File picfile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageview = (ImageView) findViewById(R.id.imageview);
load = (Button) findViewById(R.id.btn_load);
load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File file = createPicfile();
if (null != file){
String absolutePath = file.getAbsolutePath();
Log.e(TAG, "onClick: "+absolutePath );
String filepath = absolutePath+getFilePath(path);
Log.e(TAG, "onClick: "+filepath );
picfile = new File(filepath);
if (picfile.exists()){
Log.e(TAG, "onClick: "+"文件存在" );
bitmap = BitmapFactory.decodeFile(picfile.getAbsolutePath());
if (null != bitmap){
Message msg = Message.obtain();
msg.what =2;
handler.sendMessage(msg);
}else {
Log.e(TAG, "onClick: "+"文件下载错误" );
}
}else {
Log.e(TAG, "onClick: "+"文件不存在" );
try {
picfile.createNewFile();
new Thread(new Runnable() {
@Override
public void run() {
loadpicture(picfile,path);
}
}).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}else {
Log.e(TAG, "createPicfile: "+"没有sd卡" );
}
}
});
}
private void loadpicture(File picfile, String path) {
try {
FileOutputStream fos = new FileOutputStream(picfile);
URL url = new URL(path);
HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();
httpconn.setConnectTimeout(5000);
httpconn.setRequestMethod("GET");
int code = httpconn.getResponseCode();
if (HttpURLConnection.HTTP_OK == code){
Log.e(TAG, "loadpicture: "+"正在下载、、、、" );
Log.e(TAG, "loadpicture: "+"下载文件大小:"+ httpconn.getContentLength());
InputStream is = httpconn.getInputStream();
byte[] buff = new byte[512];
int len ;
while((len = (is.read(buff))) != -1){ //刚开始时把while写成if,只会运行一次
fos.write(buff,0,len);
}
is.close();
fos.flush();
fos.close();
Log.e(TAG, "loadpicture: "+"下载完成、、" );
bitmap = BitmapFactory.decodeFile(picfile.getAbsolutePath());
if (null != bitmap) {
Message msg = Message.obtain();
msg.what = 1;
handler.sendMessage(msg);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private String getFilePath(String path) {
if (null != path){
StringBuilder builder = new StringBuilder(path.trim());
int i = builder.lastIndexOf("/");
String filepath = builder.substring(i);
return filepath;
}else {
return null;
}
}
private File createPicfile() {
if (Environment.getExternalStorageState().equals(Environment.getExternalStorageState())){
String s = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Picture";
File file = new File(s);
if (!file.exists()){
file.mkdir();
}
return file;
}else {
Log.e(TAG, "createPicfile: "+"没有sd卡" );
}
return null;
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1){
imageview.setImageBitmap(bitmap);
Log.e(TAG, "handleMessage: "+"网络下载图片显示 ");
}
if (msg.what == 2){
imageview.setImageBitmap(bitmap);
Log.e(TAG, "handleMessage: "+"本地获取图片显示" );
}
}
};
}
记得加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INTERNET"/> demo下载地址:https://github.com/renjiemei1225/LoadImageAndSave
android 下载文件,file的读写应用的更多相关文章
- Android 下载文件及写入SD卡
Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- android 下载文件
import com.example.android.R; import android.app.Activity;import android.os.Bundle;import android.os ...
- android 开发-文件存储之读写sdcard
android提供对可移除的外部存储进行文件存储.在对外部sdcard进行调用的时候首先要调用Environment.getExternalStorageState()检查sdcard的可用状态.通过 ...
- 基于Android 下载文件时,更新UI简单帮助类
因为在项目开发时.有这种简单需求,问谷歌,网络上也有好多Utils工具类,可是比較冗余.自己就简单的写了一个简单帮助类. /** * 下载文件,更新UI简单帮助类 * * @author jarlen ...
- Android下载文件到SD卡
HttpURLConnection 上传方式: 尝试理解这两种流的区别: InputStreamReader 的读取方式: //创建一个URL对象 URL url = new URL(urlStrin ...
- Android 下载文件 显示进度条
加入两个权限 一个是联网,另一个是读写SD卡 <uses-permission android:name="android.permission.INTERNET">& ...
- Android下载文件提示文件不存在。。。 java.io.FileNotFoundException
遇到这个错误java.io.FileNotFoundException,事实上文件是存在的,把地址复制到手机浏览器都能够直接下载的,但为嘛不能下载呢. Error in downloadBitmap ...
- 【android】下载文件至本应用程序的file文件夹或者sdcard
一.推断是否有sdcard卡 //推断是否有SD卡 //ture:有SD卡 //false:没有SD卡 public boolean avaiableMedia(){ String status ...
- 【android】下载文件至本应用程序的file目录或者sdcard
一.判断是否有sdcard卡 //判断是否有SD卡 //ture:有SD卡 //false:没有SD卡 public boolean avaiableMedia(){ String status ...
随机推荐
- python中import和from...import区别
在python用import或者from...import来导入相应的模块.模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中 ...
- 常见的HTTP返回码如4xx, 5xx
常见的HTTP返回码如4xx, 5xx Client Error =====================400 Bad Request 因为错误的语法导致服务器无法理解请求信息.401 Unaut ...
- 黄聪:远程序桌面登录的.NET(C#)开发
MSTSCLib.dll和MsTscAxWrapper.dll下载:LibDll.rar 远程序桌面登录的.NET开发,可以使用MSTSCLib.dll和MsTscAxWrapper.dll两个转换过 ...
- JQuery 上传文件插件 Uploadify1
基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. <link href="~/Content/themes/uploadif ...
- [转]大数据hadoop集群硬件选择
问题导读 1.哪些情况会遇到io受限制? 2.哪些情况会遇到cpu受限制? 3.如何选择机器配置类型? 4.为数据节点/任务追踪器提供的推荐哪些规格? 随着Apache Hadoop的起步,云客户 ...
- python用迭代器方式便利目录下的文件
from pathlib import Path pths = [pth for pth in Path.cwd().iterdir()] 如果是os.listdir()这会返回一个list,文件非常 ...
- [源码]String StringBuffer StringBudlider(1String部分)
String /** The value is used for character storage. */ private final char value[]; /** Th ...
- Laravel学习笔记(四)数据库 数据库迁移案例
创建迁移 首先,让我们创建一个MySql数据库“Laravel_db”.接下来打开app/config目录下的database.php文件.请确保default键值是mysql: return arr ...
- html基础 2
HTML 文本格式化实例 (我不知道为什么“正常显示文本”这几个字不用加标签,虽然它有在<body>标签内) <html> <body> <b>文本为黑 ...
- Android UI 绘制过程浅析(五)自定义View
前言 这已经是Android UI 绘制过程浅析系列文章的第五篇了,不出意外的话也是最后一篇.再次声明一下,这一系列文章,是我在拜读了csdn大牛郭霖的博客文章<带你一步步深入了解View> ...