先看代码:

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. [转载]Eclipse调试Java的10个技巧

    原文:http://www.oschina.net/question/82993_69439 我也特别喜欢的是Drop to frame. 在看这篇文章前,我推荐你看一下Eclipse 快捷键手册,我 ...

  2. GDB详解

    1 简介 2 生成调试信息 3 启动GDB 的方法 4 程序运行上下文 4.1 程序运行参数 4.2 工作目录 4.3 程序的输入输出 5 设置断点 5.1 简单断点 5.2 多文件设置断点 5.3 ...

  3. sql server远程备份和恢复

    sql server远程备份和恢复 SQLSERVER服务实例名称:192.168.0.2需要备份的数据库名称: a备份机器名称(Client端):192.168.0.3备份机用户:zf 密码:123 ...

  4. 兵家必争之地——关于O2O商业模式的一点遐想

    先来说说什么是O2O(online to offline)商业模式.创新工场CEO李开复在提及O2O模式时指出,“你如果不知道O2O至少知道团购,但团购只是冰山一角,只是第一步”.O2O营销模式又称离 ...

  5. HTML5精美网站模板分享

    1. http://newweb.top/ 2. http://newweb.top/Templates/agency-gh-pages/index.html

  6. My Demo Reels

    Some elementary algorithms about discrete differential geometry http://www.cnblogs.com/yaoyansi/p/56 ...

  7. delphi中webbrowser的用法

    WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 WebBrowser1.GoForw ...

  8. OAF_开发系列27_实现OAF中Java类型并发程式开发调用XML Publisher(案例)

    20150814 Created By BaoXinjian

  9. OAF_文件系列6_实现OAF导出XML文件javax.xml.parsers/transformer(案例)

    20150803 Created By BaoXinjian

  10. MVC项目中WebViewPage的实战应用

    由于公司的项目可能会卖到国外,所以需要支持多语言.今天我就在目前的项目中实现了多语言功能,下面记录我的具体实现. 1.相信很多朋友在用MVC做项目时候,都会遇到“视图必须派生自 WebViewPage ...