安卓存储功能学习之文件存储

这是基于Android Studio3.2下开发的数据存储和读取,文件存储的核心知识点就是通过Context类中提供的openFileInput()读取数据和openFileOutput()存储数据两种方法,之后就是利用java的各种流来进行进行读写操作。

一、文件的存储

 //文件存储之保存数据(传入两个变量,第一个是要存储的字符,第二个是保存对应数据的对应id)
 private void fileSave(String inPut , int id){
       FileOutputStream out = null;
       BufferedWriter writer = null;

       try {
           switch (id){
                 case 0x7f070094: 
                 out = openFileOutput("file_data_user",Context.MODE_PRIVATE);
                 break;
                 case 0x7f07005c: 
                 out = openFileOutput("file_data_pass",Context.MODE_PRIVATE);
                 break;
                 default: Log.d("LoginActivity", "fileSave: 找不到对应的id");
                 break;
                }
                 writer = new BufferedWriter(new OutputStreamWriter(out));
                 writer.write(inPut);
                 Log.d("LoginActivity", "保存成功");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (writer != null) writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //保存数据
        private void save(){
            fileSaveLoad.fileSave(user_name.getText().toString(),user_name.getId());
            fileSaveLoad.fileSave(password.getText().toString(),password.getId());
        }
         //点击登录并保存数据
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fileSaveLoad.save();
              //  sharedPreferencesTest.preferencesSave();
            }
        });

openFileOutput()这个方法传入两个参数,第一个是文件名(在创建文件时就用这个名称),第二个是文件的操作模式,主要有两种操作模式:MODE_PRIVATE MODE_APPEND

  1. MODE_PRIVATE这个模式是默认模式,表示当指定同样文件名时,所写入的内容将覆盖原文件的内容。
  2. MODE_APPEND这个模式表示如果文件名已则存在,则往里面追加内容(比如说你第一次存储的数据是:123,那么当你再次点击存储时里面的内容就是123123这样子,这显然好多场合不适合这样的存储方式),如果文件名不存在就创建文件

上面是我用于保存文件的一个方法fileSave(),传了两个参数值,第一个是要存储的字符串,第二个是要存储对应的文本框里面的内容,首先说明一下,因为我例子做的是登陆界面,我想存储的是账号和密码这两个的数据,又因为我用的模式是MODE_PRIVATE,假如说我只存在一个文件上,那么当我存储密码时,账号已经被覆盖,这样的话不能实现我的功能,所以必须要两个文件,那这两个文件存储你不可能还要写两个完全一样的方法,这样的话代码的复用性就很差,并且人家一看就知道你是个菜鸟,当然,我也是菜鸟。

 

好象这样写有点乱,直接贴完整代码块吧,很简单的

    /*
    文件保存和读取代码内部类
     */
    private class FileSaveAndLoad{
        //文件存储之保存数据(传入两个变量,第一个是要存储的字符,第二个是保存对应数据的对应id)
        private void fileSave(String inPut,int id){
            FileOutputStream out = null;
            BufferedWriter writer = null;

            try {
                switch (id){
                    case 0x7f070094: 
                    out = openFileOutput("file_data_user",Context.MODE_PRIVATE);
                    break;
                    case 0x7f07005c: 
                    out = openFileOutput("file_data_pass",Context.MODE_PRIVATE);
                    break;
                    default: Log.d("LoginActivity", "fileSave: 找不到对应的id");
                    break;
                }
                writer = new BufferedWriter(new OutputStreamWriter(out));
                writer.write(inPut);
                Log.d("LoginActivity", "保存成功");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (writer != null) writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        //文件存储之读取数据
        private String fileLoad(int id){
            FileInputStream in = null;
            BufferedReader reader = null;
            StringBuilder builder = new StringBuilder();

            try {
                switch (id){
                    case 0x7f070094: in = openFileInput("file_data_user"); break;
                    case 0x7f07005c: in = openFileInput("file_data_pass"); break;
                    default: Log.d("LoginActivity", "fileLoad: 找不到对应的id");break;
                }
                reader = new BufferedReader(new InputStreamReader(in));
                String line = "";
                while ((line = reader.readLine()) != null){
                    builder.append(line);
                }
                Log.d("LoginActivity", "读取成功");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (reader != null) reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return builder.toString();
        }

        //启动应用自动获取数据并填充
        private void load(){
            String user_data = fileSaveLoad.fileLoad(user_name.getId());
            if (!TextUtils.isEmpty(user_data)){
                user_name.setText(user_data);
                user_name.setSelection(user_data.length());
            }
            String pass_data = fileSaveLoad.fileLoad(password.getId());
            if (!TextUtils.isEmpty(pass_data)){
                password.setText(pass_data);
                password.setSelection(pass_data.length());
            }
        }

        //保存数据
        private void save(){
            fileSaveLoad.fileSave(user_name.getText().toString(),user_name.getId());
            fileSaveLoad.fileSave(password.getText().toString(),password.getId());
        }
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值