永久化文件存储技术

一.文件存储方式

  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
原文地址:https://www.cnblogs.com/cenzhongman/p/6258777.html