先看代码:

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. AES--高级数据加密标准

    AES--高级数据加密标准 对称密码体制的发展趋势将以分组密码为重点.分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成.密钥扩展算法将b字节用户主密钥扩展成r个子密钥.加密算法由一个密码学上 ...

  2. Eclipse svn插件包

    SVN插件下载地址及更新地址,你根据需要选择你需要的版本.现在最新是1.8.x Links for 1.8.x Release: Eclipse update site URL: http://sub ...

  3. maven 记录

    1. Can't find parent:  工程中的pom.xml中定义的”project -> version”或者”parent project -> version”设置的不对导致 ...

  4. PHPCMS v9 超级安全防范教程!

    一.目录权限设置很重要:可以有效防范黑客上传木马文件.如果通过 chmod 644 * -R 的话,php文件就没有权限访问了.如果通过chmod 755 * -R 的话,php文件的权限就高了. 所 ...

  5. Appium的安装

    APPium的官网地址为:http://appium.io,在官网可以看到安装步骤如下:

  6. Redis 连接问题

    .NET 中使用 StackExchange.Redis 我为什么想写这个,总感觉很多介绍相应技术的博客,只是把内容从官网搬到自己的博客中,没有任何的实践,这样会给想学的人,没有任何好处,也可能我是自 ...

  7. Android Event

    2016-10-11 http://p.codekk.com/detail/Android/wcy10586/androidEvent https://my.oschina.net/u/191330/ ...

  8. recyleView使用笔记

    直接上代码: package com.test.recycleview; import android.app.Activity; import android.graphics.Canvas; im ...

  9. [ActionScript 3.0] 通过内联函数对addFrameScript方法传递参数

    虽然说不推荐使用影片剪辑隐藏方法addFrameScript();但是解决某些问题,此方法的确会方便很多. 但是却不能直接传递参数,不过可以用迂回的方法,如下: mc.addFrameScript(m ...

  10. 3、NASA NIST Big Data Architecture

    这篇关于大数据应用的讲解太好了,直接上图.Mattmann_S1P8_ESTF2015 来自为知笔记(Wiz)