Android外部SD卡的读取

  1 package com.kevin.writeorreadfile1_1;
  2
  3 import android.app.Activity;
  4 import android.bluetooth.le.ScanFilter;
  5 import android.graphics.Bitmap;
  6 import android.graphics.BitmapFactory;
  7 import android.media.MediaScannerConnection;
  8 import android.os.Bundle;
  9 import android.os.Environment;
 10 import android.util.Log;
 11 import android.view.View;
 12 import android.widget.Button;
 13 import android.widget.ImageView;
 14 import android.widget.Toast;
 15
 16 import java.io.BufferedInputStream;
 17 import java.io.BufferedOutputStream;
 18 import java.io.File;
 19 import java.io.FileNotFoundException;
 20 import java.io.FileOutputStream;
 21 import java.io.IOException;
 22 import java.io.InputStream;
 23 import java.io.OutputStream;
 24 import java.util.Scanner;
 25
 26 /**
 27  * 保存并读取数据
 28  * 1.确保外部SD卡可用Environment.getExternalStorageState();
 29  * 2.获取SD卡的根路径
 30  * 3.写入权限
 31  * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
 32  * <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
 33  * 4.读取
 34  */
 35 public class MainActivity extends Activity implements View.OnClickListener {
 36     private boolean state = true;
 37     private  File file;
 38     private ImageView img;
 39     private Button keepBtn,readBtn;
 40     @Override
 41     protected void onCreate(Bundle savedInstanceState) {
 42         super.onCreate(savedInstanceState);
 43         setContentView(R.layout.activity_main);
 44         //初始化控件
 45         keepBtn = (Button) findViewById(R.id.btn_keep_file);
 46         readBtn = (Button) findViewById(R.id.btn_read_file);
 47         img = (ImageView) findViewById(R.id.out_img);
 48
 49         //点击事件
 50         keepBtn.setOnClickListener(this);
 51         readBtn.setOnClickListener(this);
 52
 53         //确保SD卡可用
 54         String storageState = Environment.getExternalStorageState();//获取SD卡的状态
 55         if(storageState.equals(Environment.MEDIA_MOUNTED)){
 56             Log.i("TAG","当前SD卡可用");
 57         }else {
 58             state = false;
 59         }
 60     }
 61
 62     @Override
 63     public void onClick(View view) {
 64             switch (view.getId()){
 65                 case R.id.btn_keep_file://点击保存
 66                     if(state){
 67                         saveImg();
 68                     }
 69                     break;
 70                 case R.id.btn_read_file://点击读取
 71                     if(state){
 72                         showImg();
 73                     }
 74                     break;
 75             }
 76     }
 77     //
 78     public void saveImg(){
 79         BufferedInputStream is = null;
 80         BufferedOutputStream os = null;
 81         try {
 82             File storageDirectory = Environment.getExternalStorageDirectory();
 83             file = new File(storageDirectory,"YangKai.jpg");
 84             //读取项目中的图片
 85             InputStream inputStream = getResources().openRawResource(R.drawable.yangkai_photo);
 86             OutputStream outputStream = new FileOutputStream(file);
 87             //缓存机制
 88             is = new BufferedInputStream(inputStream);
 89             os = new BufferedOutputStream(outputStream);
 90             //读写操作
 91             int length = 0 ;
 92             byte[] bytes = new byte[1024];
 93             while ((length = is.read(bytes)) != -1){
 94                 os.write(bytes,0,length);
 95                 os.flush();//刷新操作
 96             }
 97             Toast.makeText(this,"图片已保存",Toast.LENGTH_SHORT).show();
 98             ScanFile(file.getPath());
 99         } catch (FileNotFoundException e) {
100             e.printStackTrace();
101         } catch (IOException e) {
102             e.printStackTrace();
103         }finally {
104             if ( is != null){
105                 try {
106                     is.close();
107                 } catch (IOException e) {
108                     e.printStackTrace();
109                 }
110             }
111             if (os != null){
112                 try {
113                     os.close();
114                 } catch (IOException e) {
115                     e.printStackTrace();
116                 }
117             }
118         }
119     }
120
121     //扫描进入图片
122     private void ScanFile(String path) {
123
124         MediaScannerConnection.scanFile(this,new String[]{path},null,null);
125     }
126
127     //显示图片
128     public void showImg(){
129         //从文件中读取出来
130         Bitmap bitmap = BitmapFactory.decodeFile(file.getPath());
131         img.setImageBitmap(bitmap);
132     }
133 }
时间: 2024-11-09 04:26:08

Android外部SD卡的读取的相关文章

android 往sd卡中写入文件

在调用前需要判断是否有写入权限 Environment类提供了比较丰富的方法 static File getDataDirectory() 获得android data的目录. static File getDownloadCacheDirectory() 获得下载缓存目录. static File getExternalStorageDirectory() 或者外部存储媒体目录. static File getExternalStoragePublicDirectory(String type

asserts文件存到外部SD卡里

layout代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare

Eclipse中查看Android模拟器SD卡目录

有时候用到Android模拟器来模拟SD卡相关操作,在Eclipse中可以直接查看SD卡目录: 首先,新建模拟器的时候要创建SD卡,存储的大小根据需要创建: 启动模拟器,在Eclipse中打开视图窗口:Window--Show View--File Explorer: 可以看到下面有mnt目录,mnt--sdcard 就是SD卡的目录, 也就是代码中 Environment.getExternalStorageDirectory()  的目录: 这样就可以很直观的看到代码对sd卡的操作,比如新建

Android 判断SD卡是否存在及容量查询

Android 判断SD卡是否存在及容量查询的简单方法如下: 首先要在AndroidManifest.xml中增加SD卡访问权限 [html] view plaincopy <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-pe

Android 获取SD卡路径和判断SD卡是否存在

android获取sd卡路径方法: 不建议直接写死android sd卡的路径. public String getSDPath(){ File sdDir = null; boolean sdCardExist = Environment.getExternalStorageState() .equals(android.os.Environment.MEDIA_MOUNTED); //判断sd卡是否存在 if (sdCardExist) { sdDir = Environment.getEx

android 删除SD卡或者手机的缓存图片和目录

public static final String TEMP_PHOTO_FILE_NAME = "temp_photo.jpg"; private static String mSdRootPath = Environment.getExternalStorageDirectory().getPath(); /** * 删除SD卡或者手机的缓存图片和目录 */ public void deleteFile() { Log.i("INFO", mSdRootPat

android 操作SD卡上的文件

(1)说明:操作SD卡上的文件需要加入以下权限 在SD卡上创建和删除文件权限 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 在SD卡上写入数据的权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 在sd卡上的文件操作和我上一篇文

Android获取SD卡总容量,可用大小,机身内存总容量及可用大小

public long getSDTotalSize() { /*获取存储卡路径*/ File sdcardDir= Environment.getExternalStorageDirectory(); /*StatFs 看文件系统空间使用情况*/ StatFs statFs=new StatFs(sdcardDir.getPath()); long blockSize= statFs.getBlockSizeLong(); long totalSize=statFs.getBlockCount

android关于SD卡、存储的各种操作

getExternalFilesDir getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath()返回的是图片存放的标准目录,应用被卸载时这个目录也会被删除.参数还有:public static String DIRECTORY_ALARMS系统提醒铃声存放的标准目录.public static String DIRECTORY_DCIM 相机拍摄照片和视频的标准目录.public static String DIR