一、基础概要

  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. 编译原理实习(应用预测分析法LL(1)实现语法分析)

    #include<iostream> #include<fstream> #include<iomanip> #include<cstdio> #inc ...

  2. UI背景构建

    个中原因不是很明白 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=& ...

  3. 【MyEcplise hibernate tools】hibernate tools的使用以及错误

    1.点击Myecplise右上角 2.点击进入后,在这个区域右键 New 一个新的connection 3.以mySql连接为例子,在这里展示一下,下面这几项必须都要按照要求完全一致,除了架包所在的本 ...

  4. yii2.0 的数据的 改

    修改数据 /**     * 根据获取到的数据的id 去编辑对应的数据  controller层     */ //引入对应的model use app\models\About; //定义一个方法 ...

  5. CSS3-样式继承,层叠管理,文本格式化

  6. 转:Delphi 回调函数及例子

    http://anony3721.blog.163.com/blog/static/5119742010866050589/ { http://anony3721.blog.163.com/blog/ ...

  7. WPF DataGrid – Dynamically updating DataGridComboBoxColumn

    The Scenario I want to do a master detail like scenario where the selection in one ComboBox cell wil ...

  8. 创建第一个Hiberntae工程

    一.前言 很久之前已经对Hibernate有所了解,在项目中进行过简单的应用,基本了解hibernate的简单应用,没有深入的了解,来Shine公司快三个月了,公司的ORM框架就是用Hiberante ...

  9. Long-Short Memory Network(LSTM长短期记忆网络)

    自剪枝神经网络 Simple RNN从理论上来看,具有全局记忆能力,因为T时刻,递归隐层一定记录着时序为1的状态 但由于Gradient Vanish问题,T时刻向前反向传播的Gradient在T-1 ...

  10. css flexbox水平垂直

    display: -webkit-box;display: -webkit-flex;display: -moz-box;display: -moz-flex;display: -ms-flexbox ...