Android正确获取SD卡目录及使用SD卡目录

SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作的一件事,那么在Android开发中,我们如何能获取SD卡的内存容量呢?

1、判断手机是否插入SD卡

Java代码
  1. if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
  2. doSth();
  3. //....
  4. }

2、然后才能操作SD卡

Java代码
  1. File path = Environment.getExternalStorageDirectory();

这个PATH就是你要操作的路径,当然你在操作的时候最好对SD卡的使用做个检测判断,当SD卡有存储空间时才可以进行存储操作。

Java代码
  1. StatFs statfs = new StatFs(path.getPath());

获取BLOCK的SIZE

Java代码
  1. long blocSize = statfs.getBlockSize();

获取BLOCK数量

Java代码
  1. long totalBlocks = statfs.getBlockCount();

空闲的Block的数量

Java代码
  1. long availaBlock = statfs.getAvailableBlocks();

最后别忘了,要获取SD卡上面的信息,必须先对SD卡有访问的权限,因此最后一件事就是需要添加访问扩展设备的权限,更多权限请访问:Android 应用程序开发权限一览表。

XML/HTML代码
  1. <uses-permission
  2. android:name="android.permission.WRITE_EXTERNAL_STORAGE">
  3. </uses-permission>

2、获得SD卡目录

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

3、写入文件

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

4、读取文件

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

5、读取权限

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

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

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

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

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

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

6、其它方法

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

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

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

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

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

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

  向sdcard写文件
   /** 
   * 写文件 
   */ 
   private void onWrite() { 
   try { 
   Log.d(LOG_TAG, "Start Write"); 
   //1.判断是否存在sdcard 
   if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { 
   //目录 
   File path = new File(PATH); 
   //文件 
   File f = new File(PATH + FILENAME); 
   if(!path.exists()){ 
   //2.创建目录,可以在应用启动的时候创建 
   path.mkdirs(); 
   } 
   if (!f.exists()) { 
   //3.创建文件 
   f.createNewFile(); 
   } 
   OutputStreamWriter osw = new OutputStreamWriter( 
   new FileOutputStream(f)); 
   //4.写文件,从EditView获得文本值 
   osw.write(editor.getText().toString()); 
   osw.close(); 
   } 
   } catch (Exception e) { 
   Log.d(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值,判断外部设置是否可以移除

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

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

下面看实现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();
                    }

android 读写SD卡文件相关推荐

  1. android读写sd卡代码,android读写SD卡中的文件 demo

    有时,我们需要将更大的文件保存下来,就不能用手机内置的存储空间,毕竟是有限的,所以将文件保存在SD卡中. 要读写SD卡,首先要知道手机上是否有SD卡,且是否可读写 String str = " ...

  2. Android读写SD卡

    Android读写SD卡 0. 参考 解决各版本安卓读写SD卡的问题-java.io.IOException: Operation not permitted问题(兼容到android13) 1. 安 ...

  3. android 读写sd卡的权限设置

    在Android中,要模拟SD卡,要首先使用adb的mksdcard命令来建立SD卡的镜像,如何建立,大家上网查一下吧,应该很容易找到,这里不说这个问题. 但是在应用程序执行起来以后,我们可以看到sd ...

  4. android sd卡写入,Android写入SD卡文件夹

    Android写入SD卡文件夹 我正在使用以下代码从我的服务器下载一个文件,然后将其写入SD卡的根目录,所有这些都很好:package com.downloader;import java.io.Fi ...

  5. android 模拟器 sd卡文件 fileexport,linux下android模拟器的启动和SD卡的使用介绍.pdf...

    主机配置主机配置 32 位 XP vbox 虚拟机 32 位 ubuntu10 04 android2 2 源码 JDK1 5 1 编译编译 android2 2 源码源码 编译环境准备好之后 在终端 ...

  6. android 模拟器 sd卡文件 fileexport,备份SQLite数据库文件到SD卡

    所以我见过很多备份SQLite数据库文件到SD卡的例子,我已经得到这个在开发中的android模拟器上成功工作,但它不能按预期工作在电话本身.这是我不明白的奇怪部分.备份文件实际上是在SD卡上创建文件 ...

  7. android 打开SD卡文件夹,并获得选中文件的路径怎么实现?

    ============问题描述============ 如题,我想在我的程序中点击一个按钮,然后打开系统自带的文件管理器,选择文件后,返回选中文件的路径到我的程序中,类似于下面这个图的 然后我点击文 ...

  8. java media_unmount file_(20120801)android文件的读写SD卡总结

    android的SD卡的文件读取操作 首先设置xml文件的权限,和单元测试的代码 package="com.wsl.file_txt" android:versionCode=&q ...

  9. android 数据持久化——读写SD卡中的内容

    在前面讲的那三个方法:openFileOutput .openFileInput 虽然都能通过流对象OutputStream和InputStream可以处理任意文件中的数据,但与SharedPrefe ...

最新文章

  1. 摄像头标定GML Camera Calibration
  2. Github开源趋势榜Top 1:英伟达升级发布二代StyleGAN,效果更完美
  3. android程序在调试时出现了套接字异常“java.net.SocketException: Permission denied”该如何解决...
  4. 总线接口与计算机通信(五)CAN总线
  5. leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)
  6. mysql5.7.24怎么打开_mysql-5.7.24-winx64安装教程
  7. Git使用相关问题汇总
  8. EXPLAIN mysql性能调优
  9. matlab 2013a破解文件
  10. 什么是1号信令、7号信令和PRI信令?
  11. linux-glibc升级到2.15版本
  12. confirm() 中写html,confirm用法 Confirm……that……
  13. Android studio通过科大讯飞的SDK实现文字转语音功能
  14. 一种利用强核力和弱核力复制物质原子的仪器
  15. cola公司工资java_COLA - 整洁面向对象分层架构
  16. 家用千兆路由器排行榜前十名_求家用路由器排名前十名,有哪些比较推荐?
  17. 宝塔Linux面板安装命令脚本大全(Centos/Ubuntu/Debian/Fedora/Deepin)
  18. css多图标在一张图内如何正确显示它们
  19. Oracle与SQL Server在企业应用中的比较(转)
  20. 20201120翻译_disba基于Python的面波正演模拟程序包

热门文章

  1. el-table表格合计放在上面
  2. ssm毕设项目垃圾回收系统j16l0(java+VUE+Mybatis+Maven+Mysql+sprnig)
  3. OK6410 Linux DS18B20驱动
  4. 江西职业中学高三的三校生计算机考试,2019年江西省“三校生”对口升学考试高等职业学校高考语文试题及答案.pdf...
  5. php 3d animation,基于three.js的酷炫Canvas 3D线条动画特效
  6. 数据中台(四) 组织规划
  7. Oracle实现自增
  8. python操作excel及爬取美赛证书
  9. 史上最全的推广渠道(值得收藏)
  10. 哈佛图书馆的20条经典校训