先看代码:

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的读写应用的更多相关文章

  1. Android 下载文件及写入SD卡

    Android 下载文件及写入SD卡,实例代码 <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  2. android 下载文件

    import com.example.android.R; import android.app.Activity;import android.os.Bundle;import android.os ...

  3. android 开发-文件存储之读写sdcard

    android提供对可移除的外部存储进行文件存储.在对外部sdcard进行调用的时候首先要调用Environment.getExternalStorageState()检查sdcard的可用状态.通过 ...

  4. 基于Android 下载文件时,更新UI简单帮助类

    因为在项目开发时.有这种简单需求,问谷歌,网络上也有好多Utils工具类,可是比較冗余.自己就简单的写了一个简单帮助类. /** * 下载文件,更新UI简单帮助类 * * @author jarlen ...

  5. Android下载文件到SD卡

    HttpURLConnection 上传方式: 尝试理解这两种流的区别: InputStreamReader 的读取方式: //创建一个URL对象 URL url = new URL(urlStrin ...

  6. Android 下载文件 显示进度条

    加入两个权限 一个是联网,另一个是读写SD卡 <uses-permission android:name="android.permission.INTERNET">& ...

  7. Android下载文件提示文件不存在。。。 java.io.FileNotFoundException

    遇到这个错误java.io.FileNotFoundException,事实上文件是存在的,把地址复制到手机浏览器都能够直接下载的,但为嘛不能下载呢. Error in downloadBitmap ...

  8. 【android】下载文件至本应用程序的file文件夹或者sdcard

     一.推断是否有sdcard卡 //推断是否有SD卡 //ture:有SD卡 //false:没有SD卡 public boolean avaiableMedia(){ String status ...

  9. 【android】下载文件至本应用程序的file目录或者sdcard

     一.判断是否有sdcard卡 //判断是否有SD卡 //ture:有SD卡 //false:没有SD卡 public boolean avaiableMedia(){ String status ...

随机推荐

  1. 浅入浅出“服务器推送”之一:Comet简介

    最近有个项目,其中有项需求要从服务器端主动向客户端推送数据,本以为很简单,但在实际做的过程中发现很棘手,并没有想象中的简单.从网上搜索学习,发现主流讲的还是Ajax的长轮询技术或者流技术,websoc ...

  2. C++ CTime COleTime的一些操作技巧

    strCString="2003-10-27 6:24:37"; //CString--->COleDateTime COleVariant vtime(strCString ...

  3. 基于Redis、Storm的实时数据查询实践

    通过算法小组给出的聚合文件,我们需要实现一种业务场景,通过用户的消费地点的商户ID与posId,查询出他所在的商圈,并通过商圈地点查询出与该区域的做活动的商户,并与之进行消息匹配,推送相应活动信息到用 ...

  4. bug_ _

    java.lang.SecurityException: Not allowed to bind to service I app中加了百度定位功能,大部分手机测试没问题,但有部分手机会定位失败,提示 ...

  5. java 事件监听 - 控件

    java 事件监听 //事件监听 //事件监听,写了一个小案例,点击按钮改变面板的颜色. import java.awt.*; import javax.swing.*; import java.aw ...

  6. 关于print和echo的区别

    我的想法是print是函数,echo是语句.有一个点很难去说明就是为什么可以执行print 666.可以这样不加括号,象print(666);至于为什么一定要认为print是函数,而非网上说的语句和函 ...

  7. 一次Redis的使用Bug记录(exec)

    博主在一次项目中,使用了工具类中的Redis类,因为该Redis没有封装管道pipeline和exec命令,所以就大笔一挥来了一段__call; 代码如下(其中$this->_connect() ...

  8. install cpanm

    wget http://cpanmin.us mv index.html cpanm chmod +x cpanm

  9. Map接口

    Map实现的包括HashMap 和TreeMap .建议使用HashMap ,效率更高.并且允许使用null值,单是必须保证键的唯一性,TreeMap不允许有空.在添加删除和定位映射关系的时候不如Ha ...

  10. css 画基本图形

    抄于http://dongtianee.sinaapp.com/demo9.html /******************************************************** ...