当前位置: 代码迷 >> Android >> Android之数据存储(1)
  详细解决方案

Android之数据存储(1)

热度:92   发布时间:2016-04-28 00:33:44.0
Android之数据存储(一)

????????????? 我们知道程序在运行时,数据是存放在运行内存中的,一旦程序关闭,数据就会丢失。那么我们要想数据不丢失怎么办呢?那就需要将数据存储在外存中,比如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存储对于键值对的数据存储很方便。比如存储用户名,密码,就可以实现一个记住密码功能。但是对于密码这种私密性数据都会进行加密存储,不会直接存储的,这里就不祥细论述了。

?

????????

?

  相关解决方案