文件存储在Android中最基本的一种存储方式,它不对存储内容进行任何格式化处理,只是将数据原封不动地保存到文件当中,因此它适合存储一些简单的文件和二进制内容。Context类中提供了一个openFileOutput ()方法,可以用于将数据存储到指定的文件中。这个方法接收两个参数,第一个参数是文件名,在文件创建的时候使用的就是这个名称,注意这里指定的文件名不可以包含路径,因为所有的文件都是默认存储到/data/data/<package name>/files/目录下的。第二个参数是文件的操作模式,主要有两种模式可选,MODE_PRIVATE和MODE_APPEND。
MODE_PRIVATE:是默认的操作模式,表示当指定同样文件名的时候,所写入的内容将会覆盖原文件中的内容。
MODE_APPEND:如果该文件已存在就往文件里面追加内容,不存在就创建新文件。
写入数据简单的例子:
openFileOutput ()方法返回的是一个FileOutputStream对象,得到了这个对象之后就可以使用Java流的方式将数据写入到文件中了。
public void save() {
String data = "Data to save";
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data", Context.MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
读取数据简单的例子:
类似于将数据存储到文件中,Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。这个方法要比openFileOutput()简单一些,它只接收一个参数,即要读取的文件名,然后系统会自动到/data/data/<package name>/files/目录下去加载这个文件,并返回一个FileInputStream对象,得到了这个对象之后再通过Java流的方式就可以将数据读取出来了。
public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
放一个简单例子,别忘了在AndroidManifest.xml文件中添加读写权限
MainActivity.java
package com.example.testfile;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener{
Button write, read;
EditText showWrite, showRead;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initObjects();
}
private void initObjects(){
write = (Button) findViewById(R.id.xml_write);
read = (Button) findViewById(R.id.xml_read);
showWrite = (EditText) findViewById(R.id.xml_showWrite);
showRead = (EditText) findViewById(R.id.xml_showRead);
write.setOnClickListener(this);
read.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.xml_write:
saveData();
break;
case R.id.xml_read:
readData();
break;
default:
break;
}
}
private void saveData(){
FileOutputStream out = null;
BufferedWriter write = null;
try {
out = openFileOutput("data", MODE_PRIVATE);
write = new BufferedWriter(new OutputStreamWriter(out));
write.write(showWrite.getText().toString());
showWrite.setText("");
if(write!=null)
write.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void readData(){
StringBuilder content = new StringBuilder();
FileInputStream in = null;
BufferedReader reader = null;
try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while((line=reader.readLine())!=null){
content.append(line);
}
showRead.setText(content.toString());
if(reader!=null)
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}