zoukankan      html  css  js  c++  java
  • Android 使用SDcard进行文件的读取

      平时我们需要在手机上面存储想音频,视频等等的大文件,以前学过使用File进行存储(使用File操作进行存储);由于考虑到手机本身的存储空间小,这时候我们需要把文件存储在SDcard中,今天自己也学习了一下在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值,判断外部设置是否可以移除

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

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

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

    package com.jiangqq.sdcard;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    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(R.layout.main);
            bt1 = (Button) this.findViewById(R.id.bt1);
            bt2 = (Button) this.findViewById(R.id.bt2);
            et1 = (EditText) this.findViewById(R.id.et1);
            et2 = (EditText) this.findViewById(R.id.et2);
            bt1.setOnClickListener(new MySetOnClickListener());
            bt2.setOnClickListener(new MySetOnClickListener());
        }
    
        private class MySetOnClickListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                File file = new File(Environment.getExternalStorageDirectory(),
                        FILENAME);
                switch (v.getId()) {
                case R.id.bt1:// 使用SDcard写操作
                    if (Environment.getExternalStorageState().equals(
                            Environment.MEDIA_MOUNTED)) {
    
                        try {
                            FileOutputStream fos = new FileOutputStream(file);
                            fos.write(et1.getText().toString().getBytes());
                            fos.close();
                            Toast.makeText(SDcardActivity.this, "写入文件成功",
                                    Toast.LENGTH_LONG).show();
                        } catch (Exception e) {
                            Toast.makeText(SDcardActivity.this, "写入文件失败",
                                    Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        // 此时SDcard不存在或者不能进行读写操作的
                        Toast.makeText(SDcardActivity.this,
                                "此时SDcard不存在或者不能进行读写操作", Toast.LENGTH_SHORT).show();
                    }
                    break;
    
                case R.id.bt2:// 使用SDcard读操作
                    if (Environment.getExternalStorageState().equals(
                            Environment.MEDIA_MOUNTED)) {
                        try {
                            FileInputStream inputStream = new FileInputStream(file);
                            byte[] b = new byte[inputStream.available()];
                            inputStream.read(b);
                            et2.setText(new String(b));
                            Toast.makeText(SDcardActivity.this, "读取文件成功",
                                    Toast.LENGTH_LONG).show();
                        } catch (Exception e) {
                            Toast.makeText(SDcardActivity.this, "读取失败",
                                    Toast.LENGTH_SHORT).show();
                        }
                    } else {
                        // 此时SDcard不存在或者不能进行读写操作的
                        Toast.makeText(SDcardActivity.this,
                                "此时SDcard不存在或者不能进行读写操作", Toast.LENGTH_SHORT).show();
                    }
                    break;
                }
    
            }
    
        }
    
    }

    下面截图效果:

    Demo下载链接这里

     

  • 相关阅读:
    模板元编程实现素数判定
    JDBC开发
    4.9 当相应行存在时更新
    QT5中如何使用QFtp类(这个类虽然没有被收录,但一直在更新)
    gcc和g++的区别
    Awesome C/C++(图像部分)
    Ubuntu更新源
    GO的GDB调试
    内核探测工具systemtap简介
    列举一下项目中使用的产品和技术
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4274183.html
Copyright © 2011-2022 走看看