Android数据存储方案——文件存储

文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中,因而它比较适合用于存储一些简单的文本数据。
将数据存到文件中:Context类中提供了一个openFileOutput()方法,其中包含两个参数,第一个参数是文件名(可以不包括路径,都默认存储到data/data//files/目录下的),第二个参数是是文件的操作模式,主要有两种模式可供选择,MODE_PRIVATE(所写的内容会覆盖原文件内容)和MODE_APPEND(若已存在,往文件中追加内容,不存在就创建新文件);
从文件中读取数据:Context类中提供了openFileInput()方法,
其中只有一个参数就是文件名(也是到和文件存储相同的目录下);
综合代码:
布局:只有一个EditText即可,按back键则表示退出,则里面的内容会消失,这里用文件存储把内容保存:
在这里插入图片描述
MainActivity代码:
package com.example.snake.filesave;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.EditText;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MainActivity extends AppCompatActivity {
private EditText editText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText =(EditText)findViewById(R.id.save_Text);
    String inputText = load();
    if(!TextUtils.isEmpty(inputText)){
        editText.setText(inputText);
        editText.setSelection(inputText.length());
        Toast.makeText(this, "Restoring success", Toast.LENGTH_SHORT).show();
    }

}

@Override
protected void onDestroy() {
    super.onDestroy();
    String input = editText.getText().toString();
    save(input);
}

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();
}

public void save(String inputText){
    FileOutputStream out = null;
    BufferedWriter writer = null;
    try {
        out = openFileOutput("data", Context.MODE_PRIVATE);
        writer = new BufferedWriter(new OutputStreamWriter(out));
        writer.write(inputText);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (writer != null) {
            try {
                writer.close();
        } catch(IOException e){
            e.printStackTrace();
        }
      }
    }
}

}
这里我在活动快销毁的时候把EditText的内容保存到文件中,在活动开启的时候判断文件中是否有保存内容,若是有就读取放入EditText内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值