• Android -- Android数据存储


    ⒈SharedPreferences轻量级数据存储【通常用来存储例如App的一些设置信息、用户名密码等】

    • Xml文件,K-V形式
    • SharedPreferences,通过它可以完成对数据读的操作。
    • SharedPreferences.Editor,通过它可以完成对数据写的操作。

      1.文件目录

      /data/data/<applicationId>/shared_prefs

      **包名和applicationId不一样

      applicationId可以修改

      Android Studio =》 View=》 Tool Windows =》 Device File Explorer 

      2.使用方式

            //数据存储
            SharedPreferences sharedPreferences = null;
            SharedPreferences.Editor editor = null;
    
            //第一个参数为文件名
            //第二个参数为模式
                    //MODE_PRIVATE --- 这个文件只有当前应用可以进行读写,其他App无法读写,也获取不到【常用】
                    //MODE_WORLD_READABLE --- 其他的应用可以读取
                    //MODE_WORLD_WRITEABLE --- 其他的应用可以写
                    //MODE_APPEND --- 在文件追加写入,不会覆盖文件
            sharedPreferences = getSharedPreferences("data",MODE_PRIVATE);
            editor = sharedPreferences.edit();
            editor.putString("name","fanqi");
            //commit是一个同步存储的过程,会阻塞线程,apply是一个异步的过程,会在后台进行,推荐apply
            editor.apply();    //需要提交后才能生效
            //editor.commit();
    
            //读取数据
            //参数值为key和缺省值,如果没有取到则返回缺省值
            sharedPreferences.getString("name","");

    ⒉Android存储概念

      分类

      • 内部存储【Internal Storage】,随应用卸载而被删除
        • /data/data/<applicationId>/shared_prefs
        • /data/data/<applicationId>/databases
        • /data/data/<applicationId>/files【context.getFilesDir()】
        • /data/data/<applicationId>/cache【context.geteCacheDir()】
      • 外部存储【External Storage】 
        • 共有目录【Environment.getExternalStoragePublicDirectory(int type)】
        • 私有目录【Android】,随应用卸载而被删除
          • /mnt/sdcard/Android/data/data/<applicationId>/cache【】
          • /mnt/sdcard/Android/data/data/<applicationId>/files【】

    ⒊File内部存储

    • 利用Java的I/O流
    • FileOutputStream FileInputStream
        private void save(String content){
            FileOutputStream fileOutputStream = null;
            try {
                fileOutputStream = openFileOutput("test.txt",MODE_PRIVATE);
                fileOutputStream.write(content.getBytes());
    
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fileOutputStream != null){
                    try {
                        fileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        private String read(){
            FileInputStream fileInputStream = null;
            try {
                fileInputStream = openFileInput("test.txt");
                byte[] buff = new byte[1024];
                StringBuilder builder = new StringBuilder();
                int len = 0;
                while ((len = fileInputStream.read(buff)) > 0){
                    builder.append(new String(buff,0,len));
                }
                return builder.toString();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fileInputStream != null){
                    try {
                        fileInputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }

    ⒋File外部存储

        private void save(String content){
            FileOutputStream fileOutputStream = null;
            try {
                //fileOutputStream = openFileOutput("test.txt",MODE_PRIVATE);
                File dir = new File(getExternalFilesDir(null),"coreqi");
                if(!dir.exists()){
                    dir.mkdir();
                }
                File file = new File(dir,"test.txt");
                if(!file.exists()){
                    file.createNewFile();
                }
                fileOutputStream = new FileOutputStream(file);
                fileOutputStream.write(content.getBytes());
    
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fileOutputStream != null){
                    try {
                        fileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        private String read(){
            FileInputStream fileInputStream = null;
            try {
                //fileInputStream = openFileInput("test.txt");
                File file = new File(getExternalFilesDir(null).getAbsolutePath() + File.separator + "coreqi","test.txt");
                fileInputStream = new FileInputStream(file);
                byte[] buff = new byte[1024];
                StringBuilder builder = new StringBuilder();
                int len = 0;
                while ((len = fileInputStream.read(buff)) > 0){
                    builder.append(new String(buff,0,len));
                }
                return builder.toString();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fileInputStream != null){
                    try {
                        fileInputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }

      在AndroidManifest.xml中声明SD卡权限

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

      **Android6.0之后的权限需要动态的获取,即如果你的build.gradle中compileSdkVersion的版本是23或23以上的,那么你需要考虑6.0以上动态权限的问题。

      **动态申请权限

            //字符串为要申请权限的数组
            ActivityCompat.requestPermissions(this,new String[]{
                    Manifest.permission.WRITE_EXTERNAL_STORAGE
            },1);

        

  • 相关阅读:
    python学习笔记(三):numpy基础
    python学习笔记(二):基础知识点
    python学习笔记(一):基础知识点
    SQL学习笔记:分块提取查询结果
    SQL学习笔记:函数
    SQL学习笔记:高级教程
    SQL学习笔记:基础教程
    R语言学习笔记(二十一五):如何如何提升R语言运算的性能以及速度
    R语言学习笔记(二十四):plyr包的用法
    Rsyslog的三种传输协议简要介绍
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/12171324.html
Copyright © 2020-2023  润新知