.1. Android系统中的三种存储方式
- 文件存储
- SharedPreference存储
- SQLite存储
.2. 文件存储
文件存储又可分为内部存储(Internal storage)和外部存储(External storage).
1.内部存储
- 总是可用的,程序默认将文件保存在这里
- 当程序被卸载时,保存在这里的文件是默认全部被移除的
2.外部存储
-保存的文件可以随时读取,并且所有程序都可以获得这个文件的访问权
-当程序被卸载时,系统会移除这些文件,但是如果你在getExternalFileDir() 方法获得目录下保存文件的话,它将不会被移除
3.两种方法的比较
-如果不想要文件被用户或者其他的app访问,那么内部存储是一个不错的选择
-如果是保存音乐,图片或者视屏类的文件,我们通常不希望应用程序被卸载时文件也被移除,所以最好选用外部存储的方式
4.使用内部存储 存储和读取文件
Context类提供了一个openFileOutput()方法,用于将数据存储到指定文件中,这个方法接受两个参数,第一个参数是文件名,第二个是文件的操作模式,有MODE_PRIVATE和MODE_APPEND两种方式,MODE_PRIVATE是系统默认的操作方式,当有相同文件名的文件时,这种方式会覆盖原文件,MODE_APPEND表示当文件存在时,追加内容,不存在则创建文件,这个方法返回一个FileOutputStream对象。
Context 类还提供了一个openFileInput()方法,用于从文件中读取数据,这个方法只接收一个参数,即要读取的文件名,返回一个FileInputStream对象,得到这个对象后,可以通过Java流的方式获得数据。
public void save(View view) {
FileOutputStream out = null;
BufferedWriter writer = null;
String data = editText.getText().toString();
try{
out = openFileOutput("data",MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
}catch (IOException e){
e.printStackTrace();
} finally {
if (writer != null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void load(View view) {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while((line = reader.readLine())!=null){
builder.append(line);
}
}catch (IOException e){
} finally {
if (reader !=null){
try {
reader.close();
} catch