android 读写SD卡文件

时间:2025-03-22 08:31:16


2、获得SD卡目录

1 File sdCardDir = ();//获取SDCard目录

3、写入文件

01 File f = ();//获取SD卡目录
02 File fileDir = new File(f,"");
03 FileOutputStream os = new FileOutputStream(fileDir);
04 try {
05     (());
06     ();
07     showToast("保存到SD卡中");
08 catch (IOException e) {
09     // TODO Auto-generated catch block
10     ();
11 }

4、读取文件

01 File f = ();//获取SD卡目录
02                 File fileDir = new File(f,"");
03                 is = new FileInputStream(fileDir);
04 ByteArrayOutputStream bos = new ByteArrayOutputStream();
05                 byte[] array = new byte[1024];
06                 int len = -1;
07                 while( (len = (array)) != -1){
08                     (array,0,len);
09                 }
10                 ();
11                 ();
12                 return ();

5、读取权限

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

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

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

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

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

要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。

6、其它方法

    getCacheDir()方法用于获取/data/data/<package name>/cache目录。

    getFilesDir()方法用于获取/data/data/<package name>/files目录。


其实就是普通的文件操作,不过还是有些地方需要注意。比如:

1.加入sdcard操作权限;
2.确认sdcard的存在;
3.不能直接在非sdcard的根目录创建文件,而是需要先创建目录,再创建文件;

在添加sdcard操作权限
<!-- sdcard权限 --> 
<uses-permission android:name=".WRITE_EXTERNAL_STORAGE">
</uses-permission>

变量声明:
private final static String PATH = "/sdcard/digu"; 
private final static String FILENAME = "/";

向sdcard写文件
 /** 
 * 写文件 
 */ 
 private void onWrite() { 
 try { 
 (LOG_TAG, "Start Write"); 
 //1.判断是否存在sdcard 
 if (Environment.MEDIA_MOUNTED.equals(())) { 
 //目录 
 File path = new File(PATH); 
 //文件 
 File f = new File(PATH + FILENAME); 
 if(!()){ 
 //2.创建目录,可以在应用启动的时候创建 
 (); 
 } 
 if (!()) { 
 //3.创建文件 
 (); 
 } 
 OutputStreamWriter osw = new OutputStreamWriter( 
 new FileOutputStream(f)); 
 //4.写文件,从EditView获得文本值 
 (().toString()); 
 (); 
 } 
 } catch (Exception e) { 
 (LOG_TAG, "file create error"); 
 } 
 
 }

 接着我们在使用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值,判断外部设置是否可以移除

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

().equals(Environment.MEDIA_MOUNTED)  代码中这句:我们对SDcard的状态进行判断,</span style="color:#ff0000;">

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

package ;

import  java.;
import ;
import ;

import  android.;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

public  class SDcardActivity  extends Activity {
     private Button bt1, bt2;
     private EditText et1, et2;

     private  static  final String FILENAME = "temp_file.txt";

    @Override
     public  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
        setContentView();
        bt1 = (Button)  this.findViewById(.bt1);
        bt2 = (Button)  this.findViewById(.bt2);
        et1 = (EditText)  this.findViewById(.et1);
        et2 = (EditText)  this.findViewById(.et2);
        ( new MySetOnClickListener());
        ( new MySetOnClickListener());
    }

     private  class MySetOnClickListener  implements OnClickListener {

        @Override
         public  void onClick(View v) {
            File file =  new File((),
                    FILENAME);
             switch (()) {
             case .bt1: //  使用SDcard写操作
                 if (().equals(
                        Environment.MEDIA_MOUNTED)) {

                     try {
                        FileOutputStream fos =  new FileOutputStream(file);
                        (().toString().getBytes());
                        ();
                        (SDcardActivity. this, "写入文件成功",
                                Toast.LENGTH_LONG).show();
                    }  catch (Exception e) {
                        (SDcardActivity. this, "写入文件失败",
                                Toast.LENGTH_SHORT).show();
                    }