我们知道程序在运行时,数据是存放在运行内存中的,一旦程序关闭,数据就会丢失。那么我们要想数据不丢失怎么办呢?那就需要将数据存储在外存中,比如sd卡和手机自身内存。
存储方式一:文件存储与读取
Context类中提供了一个openFileOutput ()方法,可以将数据存储到指定的文件中。这个方法有两个参数。第一个是文件名,文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<package name> /files/目录下的;第二个参数是文件测操作模式,MODE_PRIVATE & MODE_APPEND 。 MODE_PRIVATE是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容,而MODE_APPEND则表示如果该文件已存在就往文件里面追加内容,不存在就创建新文件。使用代码实例:
public void save(String str){ FileOutputStream fos=null; BufferedWriter bw=null; try { fos=openFileOutput("myTestData", Context.MODE_PRIVATE); bw=new BufferedWriter(new OutputStreamWriter(fos)); try { bw.write(str); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); }finally{ if(bw!=null) try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } }
Context类中提供了一个openFileInput ()方法,这个方法只有一个参数,那就是要读取的文件的文件名
使用实例:
public String load(String filename){ String str=""; StringBuilder content = new StringBuilder(); FileInputStream fis=null; BufferedReader br=null; try { fis=openFileInput(filename); br=new BufferedReader(new InputStreamReader(fis)); try { while((str=br.readLine())!= null ){ content.append(str); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); }finally{ if(br!=null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return content.toString(); }
文件存储使用的基本都是java的io流,熟悉java的文件操作的应该很容易读懂上面的代码。文件存储简单,但是如果要存储复杂的数据,就得自己定义存取结构与方式,才能够正确的存储与获取。
存储方式二·:SharedPreferences存储
不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的。
用代码来看可能更清晰些。
存:
SharedPreferences.Editor editor=getSharedPreferences("data", Context.MODE_PRIVATE).edit(); editor.putString("name", "Tom"); editor.putInt("age", 18); editor.putBoolean("married", false); editor.commit();
取:
SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE); String name = pref.getString("name", ""); int age = pref.getInt("age", 0); boolean married = pref.getBoolean("married", false); Log.d("MainActivity", "name is " + name); Log.d("MainActivity", "age is " + age); Log.d("MainActivity", "married is " + married);
很明显,SharedPreferences存储对于键值对的数据存储很方便。比如存储用户名,密码,就可以实现一个记住密码功能。但是对于密码这种私密性数据都会进行加密存储,不会直接存储的,这里就不祥细论述了。