一、基础概要

  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. JSON数据解析(GSON方式) (转)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...

  2. 用计算器计算“异或CRC”

    再计算器上输入以下数字,每输入一个数字,按一下“Xor”

  3. 通过SharePoint Designer对SharePoint 2010的Master Page进行自定制

    1:需要在对应的SiteCollection 和 Site 中开启Publishing的服务 2:在Designer中创建自己的Master Page,进行对原始v4.master代码进行复制,和修改 ...

  4. 【转】html、css、js文件加载顺序及执行情况

    原链接:http://www.cnblogs.com/Walker-lyl/p/5262075.html 今天看书,看到html,css,js加载执行情况,发现自己并不是真正的了解,网上搜了半小时依然 ...

  5. express-7 请求和响应对象(2)

    获取更多信息 如果正在寻找某些功能,首先要查看Express的API文档 如果需要的信息没在文档中,有时就不得不深入研究Express源码; 下面是Express源码的路径说明 lib/applica ...

  6. 如何定义移动端字体Font-Family?

    1.对于IOS 手机系统,默认中文字体是Heiti SC.默认英文字体是Helvetica.默认数字字体是HelveticaNeue.无微软雅黑字体: 2.对于Android 手机系统,默认中文字体是 ...

  7. jquery笔记(效果)

    显示/隐藏: $(selector).hide(speed, function()):隐藏 $(selector).show(speed, function()):隐藏 $(selector).tog ...

  8. AngularJs基础(一)

    使用 angularjs首先在页面的<html>里添加一个模块写法: <html lang="en"ng-app="myApp"> my ...

  9. 线段树(多维+双成段更新) UVA 11992 Fast Matrix Operations

    题目传送门 题意:训练指南P207 分析:因为矩阵不超过20行,所以可以建20条线段的线段树,支持两个区间更新以及区间查询. #include <bits/stdc++.h> using ...

  10. Git常用命令举例

    clone一个git project到本地 git clone https://github.com/huahuiyang/network-certification.git 到这个目录下,可以发现有 ...