• android-数据存储之外部file存储(sdcard)


    一、基础概要

      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();
      }

      

  • 相关阅读:
    使用委派代替继承
    《重构,改善既有代码的设计》读书笔记
    理解C指针: 一个内存地址对应着一个值
    C#实现窗口最小化到系统托盘
    C#中访问私有成员--反射
    不要在构造函数中调用可重写的方法
    链表解决约瑟夫环问题
    C数据结构(文件操作,随机数,排序,栈和队列,图和遍历,最小生成树,最短路径)程序例子
    java this,super简单理解
    数据与计算机通信习题
  • 原文地址:https://www.cnblogs.com/iamkk/p/5969225.html
Copyright © 2020-2023  润新知