一、基础概要

  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. Bag-of-words模型

    Bag-of-words模型是信息检索领域常用的文档表示方法.在信息检索中,BOW模型假定对于一个文档,忽略它的单词顺序和语法.句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立 ...

  2. 智能车学习(八)——菜单的实现

    一.代码分享 1.头文件 #ifndef __MENU_H #define __MENU_H /***********宏定义************/ //页面声明 typedef enum Menu ...

  3. ettercap局域网内DNS欺骗(隔壁的哥们轻一点 ...)

    转自:http://www.cnblogs.com/hkleak/p/5043063.html 笔记一:ettercap是什么? 我们在对WEB安全检测的时候都会用到Cain和netfuke这两款工具 ...

  4. C# 键值对类相关

    一 C# 键值对类有以下类: ①    IDictionary<string, Object> idc = new Dictionary<string, object>(); ...

  5. JQuery学习之jQuery尺寸

    1.width()和height()方法: width():设置或返回元素的宽度(不包括内边距,边框或外边距) height():设置或返回元素的高度(不包括内边距,边框或外边距) $("b ...

  6. 分享Kali Linux 2016.2第49周虚拟机

    分享Kali Linux 2016.2第49周虚拟机该虚拟机使用Kali Linux 2016.2第49周的64位镜像安装而成.基本配置如下:(1)该系统默认设置单CPU双核,内存为2GB,硬盘为50 ...

  7. 【面经】用递归方法对二叉树进行层次遍历 && 二叉树深度

    void PrintNodeAtLevel(BiTree T,int level) { // 空树或层级不合理 ) return; == level) { cout << T->da ...

  8. 数据库的SQL语句创建和主外键删除操作

    create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...

  9. Android Force Close的原因:

    1.程序空指针: 2.程序加载的资源找不到: 3.未加载布局文件时直接使用了对象: 4.后台service挂掉导致不可捕捉的ANR或crash: 5.Activity未在配置文件中注册.

  10. memcache/redis 缓存学习笔记

    0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...