zoukankan      html  css  js  c++  java
  • 永久化文件存储技术

    一.文件存储方式

      1.写入文件

    Context 类中的openFileOutput ()方法,接收两个参数,

      第一个参数是文件名,在文件创建的时候使用的就是这个名称,所有的文件都是默认存储到/data/data/<packagename>/files/ 目录下的(暂且认为不可更改)。

      第二个参数是文件的操作模式,MODE_PRIVATE (覆盖)和 MODE_APPEND(追加)

        /**
         * 数据存储程序
         *  参数:需要存储的String类型数据
         *  return :void
         */
        private void save(String inputText) {
            FileOutputStream out;//文件字节输出流
            BufferedWriter writer = null;//使用缓冲写入流
            try {
                out = openFileOutput("data", Context.MODE_PRIVATE);//openFileOutput方法,文件名,写入方式
                writer = new BufferedWriter(new OutputStreamWriter(out));//创建写入缓冲流对象
                writer.write(inputText);
                Log.d("cenEditerActivity","存储完毕");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (writer != null) {
                        writer.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

      通过openFileOutput()方法能够得到一个 FileOutputStream 对象,然后再借助它构建出一个OutputStreamWriter 对象,接着再使用 OutputStreamWriter 构建出一个 BufferedWriter 对象

      2.读取文件

    Context 类中还提供了一个 openFileInput()方法,用于从文件中读取数据。这个方法要比 openFileOutput()简单一些,它只接收一个参数,即要读取的文件名,然后系统会自动到

    /data/data/<package name>/files/目录下去加载这个文件,并返回一个FileInputStream 对象

    (为了简单,直接抛出异常,不处理)

        /**
         * 从文件获取笔记内容
         * 参数:笔记ID(暂无)
         * return:String
         */
        String getDataFromFile() throws IOException {
            BufferedReader reader;
            FileInputStream in;
            String line;
            StringBuilder content = new StringBuilder();
            in = openFileInput("data");
            reader = new BufferedReader(new InputStreamReader(in));
            while ((line = reader.readLine()) != null) {
                content.append(line);
            }
            return content.toString();
        }

    通过 openFileInput()方法获取到了一个 FileInputStream 对象,然后借助它又构建出了一个 InputStreamReader 对象,接着再使用 InputStreamReader 构建出一个BufferedReader 对象,这样我们就可以通过 BufferedReader 进行一行行地读取,把文件中所有的文本内容全部读取出来并存放在一个 StringBuilder 对象中,最后将读取到的内容返回就可以了。

    二.SharedPreferences (共享参数)

      I.通过SharePreferences存储数据

    • 三种方法用于得到 SharedPreferences 对象

        1. Context 类中的 getSharedPreferences()方法

            第一个参数,用于指定 SharedPreferences 文件的名称,SharedPreferences 文件都是存放在/data/data/<packagename>/shared_prefs/目录下的。

            第二个参数用于指定操作模式,MODE_PRIVATE(私有的,自由当前应用能读写) MODE_MULTI_PROCESS(多端处理)。默认为0,即private。

        2. Activity 类中的 getPreferences()方法

            以当前活动类名为文件名,只接收模式参数

        3.PreferenceManager 类中的 getDefaultSharedPreferences()方法这是一个静态方法

          它接收一个 Context 参数,并自动使用当前应用程序的包名作为前缀来命名 SharedPreferences 文件

    • 得到了 SharedPreferences 对象之后, 就可以开始向 SharedPreferences 文件中存储数据了

    1. 调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象。
    2. SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用putBoolean 方法,添加一个字符串则使用 putString()方法,以此类推。
    3. 调用 commit()或apply()方法将添加的数据提交,从而完成数据存储操作。

    public void onClick(View v) {
                    SharedPreferences sharedPreferences= getSharedPreferences("SharePreferences",0);
                    //调用 SharedPreferences 对象的 edit()方法来获取一个 SharedPreferences.Editor 对象
                    SharedPreferences.Editor  editor = sharedPreferences.edit();
    
                    //向 SharedPreferences.Editor 对象中添加数据
                    editor.putString("name","岑忠满");//以键来保存, name就是键
                    editor.putInt("age",28);
                    editor.putBoolean("帅不帅",true);
    
                    //调用 commit()方法将添加的数据提交
                    editor.apply();
                }

     

     II.从 SharedPreferences 中读取数据



    岑忠满的博客新站点 https://cenzm.xyz
  • 相关阅读:
    如何进入高效学习状态
    shell printf命令:格式化输出语句
    C# virtual、abstract
    git解决Could not execute editor
    go defer笔记
    git从其他分支提取文件merge到当前分支
    golang map
    状态模式
    golang单例模式
    go 单元测试时读取配置文件
  • 原文地址:https://www.cnblogs.com/cenzhongman/p/6258777.html
Copyright © 2011-2022 走看看