永久化文件存储技术
一.文件存储方式
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(); }