AndroidStudio中利用openFileOutput将数据保存在文件中,利用openFileInput读取文件中的数据

痛定思痛。 2023-07-17 15:43 91阅读 0赞

一、要实现的功能

将输入框中的数据保存到指定文件名的文件中,实现数据的持久化;如果数据已经保存了,活动下次再启动的时候,就将保存在文件中的数据读取出来,显示在输入框中。

二、基本知识

  1. 利用活动生命周期中的一个回调函数onDestroy(),在活动被销毁之前,将数据写入到文件当中。例如按下返回键的时候,活动就被销毁,这个方法里面的代码就会被执行。
  2. 利用TextUtils中的isEmpty(CharSequence str)方法可以轻松地判断一个字符串变量是不是null,以及这个字符串是不是空字符串(字符串长度为0)。java中传统的方式是这么写的:
    if(string!=null&&string.length()!=0)
    ,这种方式比较麻烦,用TextUtils的话就比较方便了。
  3. ① 利用Contex类中的openFileOutput(String name, int mode)方法可以获取一个FileOutputStream对象,这个方法第一个参数传入的是文件名,第二个参数是文件的操作模式,取值主要有MODE_PRIVATE、 MODE_APPEND,如果文件已经存在了,第一种方式会把文件中原来的内容覆盖掉,第二种方式则是在原来的基础上进行追加数据。
    ②利用Contex类中的openFileInput(String name)可以获取一个FileInputStream对象,方法中传入的参数是文件的名称。
    除此之外,文件的读写操作就没有什么特殊的了,用到的都是JDK中的IO知识,这里还用到了缓冲字符流,主要是为了提高读取、写入的速度。

三、代码

  1. java代码:

    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.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;

    public class MainActivity extends AppCompatActivity
    {

    1. private EditText et;
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState)
    4. {
    5. super.onCreate(savedInstanceState);
    6. setContentView(R.layout.activity_main);
    7. et=findViewById(R.id.et);
    8. String load = load();
    9. if (!TextUtils.isEmpty(load))//如果文件存在
    10. {
    11. et.setText(load);
    12. et.setSelection(load.length());//将光标移动到输入框的末尾
    13. Toast.makeText(this,"从文件中恢复数据成功!",Toast.LENGTH_SHORT).show();
    14. }
    15. }
    16. @Override
    17. protected void onDestroy()//活动被销毁之前,将数据保存到文件中
    18. {
    19. super.onDestroy();
    20. String string = et.getText().toString();
    21. save(string);
    22. }
    23. /**
    24. * 将文本数据写入到文件中
    25. * @param inputText
    26. */
    27. private void save(String inputText)
    28. {
    29. FileOutputStream fileOutputStream=null;
    30. BufferedWriter bufferedWriter=null;
    31. try
    32. {
    33. fileOutputStream=openFileOutput("info.txt",MODE_PRIVATE);
    34. bufferedWriter=new BufferedWriter(new OutputStreamWriter(fileOutputStream));
    35. bufferedWriter.write(inputText);
    36. } catch (Exception e)
    37. {
    38. System.out.println(e);
    39. }
    40. finally
    41. {
    42. if (bufferedWriter!=null)
    43. {
    44. try
    45. {
    46. bufferedWriter.close();
    47. } catch (IOException e)
    48. {
    49. System.out.println(e);
    50. }
    51. }
    52. }
    53. }
  1. /**
  2. * 从文件中读取数据
  3. * @return
  4. */
  5. private String load()
  6. {
  7. FileInputStream fileInputStream=null;
  8. BufferedReader bufferedReader=null;
  9. StringBuilder stringBuilder=new StringBuilder();
  10. try
  11. {
  12. fileInputStream= openFileInput("info.txt");
  13. bufferedReader=new BufferedReader(new InputStreamReader(fileInputStream));
  14. String line="";
  15. while ((line=bufferedReader.readLine())!=null)
  16. {
  17. stringBuilder.append(line);
  18. }
  19. } catch (Exception e)
  20. {
  21. System.out.println(e);
  22. }
  23. finally
  24. {
  25. if (bufferedReader!=null)
  26. {
  27. try
  28. {
  29. bufferedReader.close();
  30. } catch (IOException e)
  31. {
  32. System.out.println(e);
  33. }
  34. }
  35. }
  36. return stringBuilder.toString();
  37. }
  38. }
  1. 布局代码:

    <?xml version=”1.0” encoding=”utf-8”?>

四、截图

以下是两张在模拟器中的效果截图。

  1. 输入要保存的文字信息:
    在这里插入图片描述
  2. 文件保存以后,下次再打开程序:
    在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,91人围观)

还没有评论,来说两句吧...

相关阅读