Android 数据存储(二)文件存储
在android中数据存储分四种:文件存储,共享参数存储,外部存储,数据库存储,各自都有优势和缺点,本文章主要了解文件存储。
一。存储原理及步骤:文件存储的原理就是用IO流的原理,对数据进行写入和读出,具体步骤如下:
1.用openFileOutputStream()和openFileInputStream()得到FileOutputStream/FileInputStream;
2.通过FileOutputStream()/FileInputStream()得到BufferedReader/BufferedWriter(缓存流,可提高效率);
3.用write()/read()方法对数据进行相应的操作。
4.用close()关闭流。
二。存储路径:data/data/包名/files下。
三。具体实例:
public class MainActivity extends Activity {
private EditText editText;
private String content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText) findViewById(R.id.editText);
}
/**
* 用于保存数据
*/
public void saveData(View view){
content=editText.getText().toString();
FileOutputStream out=null;
BufferedWriter writer=null;
try {
/**
* 得到FileOutputStream对象,
* 第一个参数:指定的文件名;
* 第二个参数:操作模式,一般有两种,MODE_APPEND:当指定的文件名存在时,所写入的内容追加到原来文件中,不会发生覆盖;不存在就会创建
* MODE_PRIVATE:当指定的文件名存在时,会覆盖原来的,创建一个新的文件。
*
*/
out=openFileOutput("data", MODE_PRIVATE);
//得到缓存输出流的对象
writer=new BufferedWriter(new OutputStreamWriter(out));
//将数据写入流中
writer.write(content);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//在finally()语句中关闭流
if(writer!=null)
{
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 读取数据
*
*/
public void getData(View view){
FileInputStream in=null;
BufferedReader reader=null;
StringBuilder content=new StringBuilder();
try {
/**
* 用openFileInput(),参数为文件名
*/
in=openFileInput("data");
if(in==null){
Toast.makeText(this, "无数据", Toast.LENGTH_SHORT).show();
return;
}
reader=new BufferedReader(new InputStreamReader(in));
String line=null;
while((line=reader.readLine())!=null){
content.append(line);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Toast.makeText(this, content.toString(), Toast.LENGTH_SHORT).show();
}
一。存储原理及步骤:文件存储的原理就是用IO流的原理,对数据进行写入和读出,具体步骤如下:
1.用openFileOutputStream()和openFileInputStream()得到FileOutputStream/FileInputStream;
2.通过FileOutputStream()/FileInputStream()得到BufferedReader/BufferedWriter(缓存流,可提高效率);
3.用write()/read()方法对数据进行相应的操作。
4.用close()关闭流。
二。存储路径:data/data/包名/files下。
三。具体实例:
public class MainActivity extends Activity {
private EditText editText;
private String content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText) findViewById(R.id.editText);
}
/**
* 用于保存数据
*/
public void saveData(View view){
content=editText.getText().toString();
FileOutputStream out=null;
BufferedWriter writer=null;
try {
/**
* 得到FileOutputStream对象,
* 第一个参数:指定的文件名;
* 第二个参数:操作模式,一般有两种,MODE_APPEND:当指定的文件名存在时,所写入的内容追加到原来文件中,不会发生覆盖;不存在就会创建
* MODE_PRIVATE:当指定的文件名存在时,会覆盖原来的,创建一个新的文件。
*
*/
out=openFileOutput("data", MODE_PRIVATE);
//得到缓存输出流的对象
writer=new BufferedWriter(new OutputStreamWriter(out));
//将数据写入流中
writer.write(content);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//在finally()语句中关闭流
if(writer!=null)
{
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 读取数据
*
*/
public void getData(View view){
FileInputStream in=null;
BufferedReader reader=null;
StringBuilder content=new StringBuilder();
try {
/**
* 用openFileInput(),参数为文件名
*/
in=openFileInput("data");
if(in==null){
Toast.makeText(this, "无数据", Toast.LENGTH_SHORT).show();
return;
}
reader=new BufferedReader(new InputStreamReader(in));
String line=null;
while((line=reader.readLine())!=null){
content.append(line);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(reader!=null){
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Toast.makeText(this, content.toString(), Toast.LENGTH_SHORT).show();
}
}
四。运行效果如下: