第一行代码 第六章 数据储存方案 - 文件存储

本文介绍了Android中三种数据持久化方法,重点讲解了文件存储。通过Context的openFileOutput()和openFileInput()方法,实现了数据的写入和读取。详细阐述了使用Java流操作FileOutputStream和FileInputStream进行文件操作的步骤,包括如何写入和读取文本内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android主要提供了3个方法实现数据的持久化功能
1、SharedPreference存储;2、文件存储;3、数据库存储

1、文件存储
它是android中最基本的一种数据存储方式。它不对存储的内容做任何的格式化处理,将数据原封不动地保存到文件中。

Context类中提供了openFileOutput()方法,用于将数据存储到指定的文件中。
该方法提供两个接收参数
第一个参数是文件名。这里指定的文件名不可以包含路径,因为所有的文件都默认存储到/data/data//file目录下。
第二个参数是文件的操作模式。提供两种模式:
1.MODE_PRIVATE:当指定同样文件名时,所写入的内容将会覆盖原文件的内容
2.MODE_APPEND:如果该文件已经存在,则在文件的末尾追加内容。

该方法返回一个FileOutputStream对象,得到这个对象之后,就可以使用Java流的方式将数据写入到文件中。
Java流方式:写入数据
1.通过openFileOutput()方法得到FileOutputStream对象;
2.借助FileOutputStream对象,构建一个OutputStreamWriter对象;
3.借助OutputStreamWriter对象,构建一个BufferedWriter对象
4.通过BufferedWriter对象提供的write()方法,就可以将文本内容写入到文件中。

实例:如何将一段文本内容保存到文件中

public void saveFile(){
    String data = "Hello World!";
    FileOutputStream mFileOutputStream = null;
    OutputStreamWriter mOutputStreamWriter = null;
    BufferedWriter writer = null;
    try{
        mFileOutputStream = openFileOutput("data.txt", MODE_APPEND);
        mOutputStreamWriter = new OutputStreamWriter(mFileOutputStream)
        writer = new BufferedWrite(mOutputStreamWriter);
        writer.write(data);
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        try{
            if(writer != null){
                writer.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

Context类还提供了一个openFileInput()方法,用于从文件中读取数据。
它只接收一个参数,即文件名

它返回一个FileInputStream对象,得到这个对象后就可以通过Java流的方式将数据读出来
Java流的方式:读取数据
1.通过openFileInput方法得到一个FileInputStream对象;
2.借助FileInputStream对象,构建InputStreamReader对象;
3.借助InputStreamReader对象,构建BufferedReader对象
4.通过BufferedReader进行一行一行地读取,并存放到StringBuilder对象中。

实例:如何从文件中读取文本数据

public String load(){
    FileInputStream fileInputStream = null;
    InputStreamReader inputStreamReader = null;
    BufferedReader reader = null;
    StringBuilder builder = new StringBuidler();
    try{
        fileInputStream = openFileInput("data.txt");
        inputStreamReader = new InputStreamReader(fileInputStream);
        reader = new BufferedReader(inputStreamReader);
        String line = "";
        while((line=reader.readLine()) != null){
            builder.append(line);
        }
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        if(reader != null){
            try{
            reader.close();
            }catch(IOException e){
                e.printStackTrace();
            }

        }
    }

    return builder.toString();
}

实例:读写文件
MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btnWriteToFile;
    private Button btnReadFromFile;
    private EditText etIput;
    private TextView tvShowContent;

    private final  static String FILE_NAME = "data.txt";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnWriteToFile = (Button)findViewById(R.id.btnWriteToFile);
        btnReadFromFile = (Button)findViewById(R.id.btnReadFromFile);
        etIput = (EditText)findViewById(R.id.etIput);
        tvShowContent = (TextView)findViewById(R.id.tvShowContent);

        btnWriteToFile.setOnClickListener(this);
        btnReadFromFile.setOnClickListener(this);

        String data = readFromFile(FILE_NAME);
        if(!TextUtils.isEmpty(data)){
            etIput.setText(data);
            etIput.setSelection(data.length());
            tvShowContent.setText(data);
        }
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btnWriteToFile:
                String content = etIput.getText().toString();
                writeToFile(FILE_NAME, content);
                break;
            case R.id.btnReadFromFile:
                String ret = readFromFile(FILE_NAME);
                tvShowContent.setText(ret);
                break;
            default:break;
        }
    }

    private void writeToFile(String filename, String content) {
        FileOutputStream fileOutputStream = null;
        OutputStreamWriter outputStreamWriter = null;
        BufferedWriter writer = null;
        try {
            fileOutputStream = openFileOutput("data.txt", MODE_APPEND);
            outputStreamWriter = new OutputStreamWriter(fileOutputStream);
            writer = new BufferedWriter(outputStreamWriter);
            writer.write(content);
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if(writer != null){
                    writer.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    private String readFromFile(String filename){
        FileInputStream fileInputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        StringBuilder builder = new StringBuilder();
        try{
            fileInputStream = openFileInput(filename);
            inputStreamReader = new InputStreamReader(fileInputStream);
            reader = new BufferedReader(inputStreamReader);
            String line = "";
            while ((line = reader.readLine()) != null){
                builder.append(line);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(reader != null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return builder.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值