Android中使用SDcard进行文件的读取


平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用File进行存储(使用File操作进行存储)见  ;由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在SDcard中,今天自己也学习了一下在Android进行sdcard的存储使用方法;

本文工程源码下载地址

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /2012年资料/1月/13日/Android中使用SDcard进行文件的读取/

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置:

  在AndroidManifest.xml中加入访问SDCard的权限如下:

  <!-- 在SDCard中创建与删除文件权限 -->

  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

 <!-- 往SDCard写入数据权限 -->

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

     

    接着我们在使用SDcard进行读写的时候 会用到Environment类下面的几个静态方法  

   1: getDataDirectory()  获取到Androi中的data数据目录

   2:getDownloadCacheDirectory()  获取到下载的缓存目录

   3:getExternalStorageDirectory()  获取到外部存储的目录 一般指SDcard

   4:getExternalStorageState() 获取外部设置的当前状态 一般指SDcard, 

         android系统中对于外部设置的状态,我们比较常用的应该是 MEDIA_MOUNTED(SDcard存在并且可以进行读写)  MEDIA_MOUNTED_READ_ONLY (SDcard存在,只可以进行读操作)  当然还有其他的一些状态,可以在文档中进行查找到  

    5:getRootDirectory()  获取到Android Root路径

   6:isExternalStorageEmulated() 返回Boolean值判断外部设置是否有效

   7:isExternalStorageRemovable()  返回Boolean值,判断外部设置是否可以移除

   【注】上面进行红色标记的方法,我们会常用

[java]
  1. Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)  代码中这句:我们对SDcard的状态进行判断,  

     下面看实现SDCard进行文件读写操作的Demo:

     

[java]
  1. package com.jiangqq.sdcard;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6.   
  7. import android.app.Activity;  
  8. import android.content.Context;  
  9. import android.os.Bundle;  
  10. import android.os.Environment;  
  11. import android.view.View;  
  12. import android.view.View.OnClickListener;  
  13. import android.widget.Button;  
  14. import android.widget.EditText;  
  15. import android.widget.Toast;  
  16.   
  17. public class SDcardActivity extends Activity {  
  18.     private Button bt1, bt2;  
  19.     private EditText et1, et2;  
  20.   
  21.     private static final String FILENAME = "temp_file.txt";  
  22.   
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.main);  
  27.         bt1 = (Button) this.findViewById(R.id.bt1);  
  28.         bt2 = (Button) this.findViewById(R.id.bt2);  
  29.         et1 = (EditText) this.findViewById(R.id.et1);  
  30.         et2 = (EditText) this.findViewById(R.id.et2);  
  31.         bt1.setOnClickListener(new MySetOnClickListener());  
  32.         bt2.setOnClickListener(new MySetOnClickListener());  
  33.     }  
  34.   
  35.     private class MySetOnClickListener implements OnClickListener {  
  36.   
  37.         @Override  
  38.         public void onClick(View v) {  
  39.             File file = new File(Environment.getExternalStorageDirectory(),  
  40.                     FILENAME);  
  41.             switch (v.getId()) {  
  42.             case R.id.bt1:// 使用SDcard写操作   
  43.                 if (Environment.getExternalStorageState().equals(  
  44.                         Environment.MEDIA_MOUNTED)) {  
  45.   
  46.                     try {  
  47.                         FileOutputStream fos = new FileOutputStream(file);  
  48.                         fos.write(et1.getText().toString().getBytes());  
  49.                         fos.close();  
  50.                         Toast.makeText(SDcardActivity.this"写入文件成功",  
  51.                                 Toast.LENGTH_LONG).show();  
  52.                     } catch (Exception e) {  
  53.                         Toast.makeText(SDcardActivity.this"写入文件失败",  
  54.                                 Toast.LENGTH_SHORT).show();  
  55.                     }  
  56.                 } else {  
  57.                     // 此时SDcard不存在或者不能进行读写操作的   
  58.                     Toast.makeText(SDcardActivity.this,  
  59.                             "此时SDcard不存在或者不能进行读写操作", Toast.LENGTH_SHORT).show();  
  60.                 }  
  61.                 break;  
  62.   
  63.             case R.id.bt2:// 使用SDcard读操作   
  64.                 if (Environment.getExternalStorageState().equals(  
  65.                         Environment.MEDIA_MOUNTED)) {  
  66.                     try {  
  67.                         FileInputStream inputStream = new FileInputStream(file);  
  68.                         byte[] b = new byte[inputStream.available()];  
  69.                         inputStream.read(b);  
  70.                         et2.setText(new String(b));  
  71.                         Toast.makeText(SDcardActivity.this"读取文件成功",  
  72.                                 Toast.LENGTH_LONG).show();  
  73.                     } catch (Exception e) {  
  74.                         Toast.makeText(SDcardActivity.this"读取失败",  
  75.                                 Toast.LENGTH_SHORT).show();  
  76.                     }  
  77.                 } else {  
  78.                     // 此时SDcard不存在或者不能进行读写操作的   
  79.                     Toast.makeText(SDcardActivity.this,  
  80.                             "此时SDcard不存在或者不能进行读写操作", Toast.LENGTH_SHORT).show();  
  81.                 }  
  82.                 break;  
  83.             }  
  84.   
  85.         }  
  86.   
  87.     }  
  88.   
  89. }  
下面截图效果:

  



相关内容