一、基础概要

  1、说明:

    1>应用程序运行用到的数据文件可以保存到sd卡中

    2>文件类型:任意

    3>数据保存路径:

      路径1:/storage/sdcard/Android/data/packageName/files     其它应用可以访问,应用卸载时删除

      路径2:/storage/sdcard/xxx/    (表示自己创建的文件--xxx)     其它应用可以访问,应用卸载时不会被删除

  2、相关API

    Environment 操作sd卡工具类:

      ---得到sd卡状态:Environment.getExternalStorageState()

          sd卡可读写的挂载状态值:Environment.MEDIA_MOUNTED

      ---得到sd卡路径:Environment.getExternalStorageDirectory()

    context.getExternalFilesDir():

      ---得到 /mnt/sdcard/Android/data/package_name/files/xxx.txt

    

    操作sd卡的权限:

      ---android.permission.WRITE_EXTERNAL_STORAGE  属于写的权限,但加上后也可读。

二、开发步骤(路径1)

1、写数据

  1>判断sd卡状态,如果是挂载的状态继续

  2>获取输入文件名/内容

  3>得到指定文件的OutputStream:

    .得到sd卡下的files路径

    .组成完整路径

    .创建FileOutputStream

  4>写数据

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
   
      String fileName="xrk";
      String fileContent="我不是向日葵";
      String filesPath=getExternalFilesDir(null).getAbsolutePath();
      String filePath=filesPath+"/"+fileName;
      FileOutputStream fos=new FileOutputStream(filePath);
      fos.write(fileContent.getBytes("utf-8"));
      fos.close();
      Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
  }else{
   Toast.makeText(MainActivity.this, "保存是啊比", Toast.LENGTH_SHORT).show();
  }

2、读数据:

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
   
      String fileName="xrk";
      String filesPath=getExternalFilesDir(null).getAbsolutePath();
      System.out.println("iueiudshcs"+filesPath);
      String filePath=filesPath+"/"+fileName;
      FileInputStream fis=new FileInputStream(filePath);
      ByteArrayOutputStream baos=new ByteArrayOutputStream();
      byte[] buffer=new byte[1024];
      int len=-1;
      while((len=fis.read(buffer))!=-1){
       baos.write(buffer, 0, len);
      }
      String content=baos.toString();
      
      
      Toast.makeText(MainActivity.this, "读取成功"+content, Toast.LENGTH_SHORT).show();
  }else{
   Toast.makeText(MainActivity.this, "读取失败", Toast.LENGTH_SHORT).show();
  }

 

三、开发步骤(路径2) 

1、写数据

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
   
      String fileName="谢荣康.txt";
      String fileContent="我不是向日葵";
      //得到指定文件的输出流
      String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
      File file=new File(sdPath+"/atguigu");
      if (!file.exists()) {
    file.mkdirs();//创建文件夹
   }
      String filePath=sdPath+"/atguigu/"+fileName;
      String filesPath=getExternalFilesDir(null).getAbsolutePath();
      System.out.println("iueiudshcs"+filesPath);
      FileOutputStream fos=new FileOutputStream(filePath);
      
      fos.write(fileContent.getBytes("utf-8"));
      fos.close();
      Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
  }else{
   Toast.makeText(MainActivity.this, "保存是啊比", Toast.LENGTH_SHORT).show();
  } 

2、读数据:

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
   
      String fileName="谢荣康.txt";
      String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
      String filePath=sdPath+"/atguigu/"+fileName;
      FileInputStream fis=new FileInputStream(filePath);
      ByteArrayOutputStream baos=new ByteArrayOutputStream();
      byte[] buffer=new byte[1024];
      int len=-1;
      while((len=fis.read(buffer))!=-1){
       baos.write(buffer, 0, len);
      }
      String content=baos.toString();
      fis.close();
      
      Toast.makeText(MainActivity.this, "读取成功"+content, Toast.LENGTH_SHORT).show();
  }else{
   Toast.makeText(MainActivity.this, "读取失败", Toast.LENGTH_SHORT).show();
  }

  

android-数据存储之外部file存储(sdcard)的更多相关文章

  1. 【Android】14.2 外部文件存储和读取

    分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 1.基本概念 内部存储的私有可用存储空间一般都不会很大,对于容量比较大的文件,例如视频等,应该将其存储在外部存储设 ...

  2. 第8章 Android数据存储与IO——File存储

    openFileOutput/openFileInput 这是android自带的两种解决方案.

  3. esxi存储(外部共享存储)

    vSphere 基础物理架构中存储是一个非常关键的部分,没有好的存储,虚拟化也就没有存在的价值,并且它能够决定其系统性能的高低和如vMotion等高级功能能否实现.所以本次重点介绍vSphere中的存 ...

  4. Android数据存储:SDCard

    Android数据存储之SDCard 0.获取sd卡路径. 1.讲述 Environment 类. 2.讲述 StatFs 类. 3.完整例子读取 SDCard 内存 0.获取sd卡路径 方法一: p ...

  5. Android数据存储的三种方式:SharePreferences , file , SQLite

    (1)SharePreferences: 存入: SharedPreferences setter = this.getSharedPreferences("spfile", 0) ...

  6. Android数据存储三剑客——SharedPreferences、File、SQLite

    Android中常用的数据存储一般有三种方式:SharedPreferences.文件和SQLite数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...

  7. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  8. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别 是:SharePreference.SQLite.Content Provider和File ...

  9. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

随机推荐

  1. 64位ubuntu下重新编译hadoop2.2流水账

    hadoop官方网站中只提供了32位的hadoop-2.2.0.tar.gz,如果要在64位ubuntu下部署hadoop-2.2.0,就需要重新编译源码包,生成64位的部署包.建议以下操作使用roo ...

  2. linux下SVN忽略文件/文件夹的方法

    linux下SVN忽略文件/文件夹的方法 假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录) ...

  3. 从两个平方算法到分治算法-java

    先来看看问题的来源,假设有这么一个数组: 1 2 -5 4 -2 3 -3 4 -15 我们要求出其中连续字数组的和的最大值 例如这么可以很明显看出 4+ –2 + 3 + –3 + 4 = 6 所有 ...

  4. 数值的三种表示--C语言

    在C语言中,数值常数可以是3中形式: (1)在数值前面加0表示的是8进制数据: (2)在数字前面加0x表示的是16进制数: (3)在数值前面什么也不加,表示的是10进制数值.        目前C语言 ...

  5. mysql root用户 远程登录其它机器,看不到数据库

    在102上访问101上的数据库里,show databases;看不到里面的库, 需要在101上授权就可以了 GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.16 ...

  6. JQ学习(三)-ajax

    jQuery - AJAX jQuery load() 方法 jQuery load() 方法是简单但强大的 AJAX 方法. load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 语法 ...

  7. css整理-06 表和列表

    表格式化 表布局 table, display:table caption, display: table-caption thead, display: table-header-group tbo ...

  8. js中各种宽高

    各种宽高 Javascript: IE中:document.body.clientWidth ==> BODY对象宽度document.body.clientHeight ==> BODY ...

  9. Swift3.0语言教程字符串与文件的数据转换

    Swift3.0语言教程字符串与文件的数据转换 Swift3.0语言教程字符串与文件的数据转换,如果想要对字符串中的字符进行永久保存,可以将字符串中的字符写入到文件中.当然,开发者也可以将写入的内容进 ...

  10. BZOJ 3542 [Poi2014]Couriers ——可持久化线段树

    [题目分析] 查找区间内出现次数大于一半的数字. 直接用主席树,线段树上维护区间大小,由于要求出现次数大于一半,每到一个节点可以分治下去. 时间复杂度(N+Q)logN [代码] #include & ...