第一行代码-6.2 文件存储

  文件存储是安卓三种持久化技术(包括文件存储、SharedPreferences存储和数据库存储)的其中一种,也是最直接最简单的一种,下面来看看它是怎么实现的:
1、将数据存储到文件中
  下面通过一个例子,说明一下openFileOutput的用法,以及一些注意事项。

// MainActivity.java -> public class MainActivity
private EditText edittext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edittext = (EditText) findViewById(R.id.edittext);
    }

    @Override
    protected void onDestroy() {
        // 获取文本内容
        String content = edittext.getText().toString();
        store(content);
        super.onDestroy();
    }

    private void store(String content) {
        FileOutputStream out = null;
        BufferedWriter writer = null;
        try {
            out = MainActivity.this.openFileOutput("data", Context.MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(out));
            writer.write(content);
            writer.flush();
            writer.close();
        } catch (FileNotFoundException e) {
            Log.e("sysu", e.getMessage());
        } catch (IOException e) {
            Log.e("sysu", e.getMessage());
        }
    }

  要注意的地方:Context.openFileOutput这个函数的第一个参数的意思是文件名,不能添加路径,因为文件默认存储到/data/data/包名/flies目录下;第二个参数是存储模式,主要有两种:MODE_PRIVATE和MODE_APPEND,第一种模式的意思是新写入的文件会覆盖旧文件;第二种模式是新内容不会覆盖,而是添加到旧内容的后面。其实还有MODE_WORLD_READABLE 和MODE_WORLD_WRITEABLE,但由于安全性不高,在Android 4.2之后就被废弃了。
  效果:首先在手机上打开应用,输入文本,然后点击返回键退出。

  用DDMS查看手机内容,可以看到data文件已经存储到前面说的目录下。
这里写图片描述

2、从文件中读取数据
  有openFileOutput就有openFileInput,下面看看它的用法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    edittext = (EditText) findViewById(R.id.edittext);
    String content = load();
    if (!TextUtils.isEmpty(content)) {
        edittext.setText(content);
        edittext.setSelection(content.length());
        Toast.makeText(MainActivity.this, "加载数据成功!", Toast.LENGTH_LONG).show();
    }
}

private String load() {
    InputStream in = null;
    BufferedReader br = null;
    StringBuilder sb = new StringBuilder();
    String line;
    try {
        in = MainActivity.this.openFileInput("data");
        br = new BufferedReader(new InputStreamReader(in));
        sb = new StringBuilder();
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }
    }
    catch (Exception e) {Log.e("sysu", e.getMessage());}
    return sb.toString();
}

  load函数的内容比较简单,onCreate里有几个方法需要注意:TextUtil.isEmpty(string)这种方法会把字符串为null和空值都判断为true,从而避免了需要分开考虑这两种问题的麻烦。然后setSelection函数的作用是设置EditText的光标的位置。
  最终效果就是每次FilePersistenceTest打开的时候,会自动加载data里面的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值