美文网首页
Android本地存取数据的操作、偏好设置

Android本地存取数据的操作、偏好设置

作者: biyu6 | 来源:发表于2019-02-22 11:20 被阅读0次

    1.手机自身内存数据的存取操作:

    //封装的保存和读取方法
    public class UserInfoUtils {
        //保存用户名和密码的方法
        public static boolean saveInfo(Context context,String userName,String pwd) {
            try {//尝试保存信息
                //将用户名和密码拼接成一个字符串
                String result = userName + "##" + pwd;
    //          //指定存放的本地文件路径
    //          String path = context.getFilesDir().getPath();//会在data/data/应用的包内生成一个file文件夹
    //          File file = new File(path,"info.txt");
    //          //创建文件输出流
    //          FileOutputStream fos = new FileOutputStream(file);
    //          
                /**通过上下文获取文件的输出流FileOutputStream 
                 * name: 文件的名字
                 * mode: 文件的模式:0私有的MODE_PRIVATE、可追加MODE_APPEND、可读MODE_WORLD_READABLE、可写MODE_WORLD_WRITEABLE
                 * */
                FileOutputStream fos = context.openFileOutput("infoo.txt", 0);
                //将内容写下来
                fos.write(result.getBytes());
                //关闭文件流
                fos.close();
                
                return true;
            } catch (Exception e) {//保存信息异常
                System.out.println("用户名密码保存失败!");
                
                return false;
            }
        }
        
        //读取用户的信息
        public static Map<String, String> readInfo(Context context) {
            try {//尝试读取信息
                //定义map
                Map<String, String> maps = new HashMap<String, String>();
                //指定读取的本地文件路径
    //          File file = new File("data/data/com.biyu6.login/info.txt");
    //          String path = context.getFilesDir().getPath();
    //          File file = new File(path,"info.txt");
    //          //创建文件读取流
    //          FileInputStream fis = new FileInputStream(file);
    //          
                //通过上下文获取文件读取流
                FileInputStream fis = context.openFileInput("infoo.txt");
                //将内容读取出来
                BufferedReader buf = new BufferedReader(new InputStreamReader(fis));
                String contentStr = buf.readLine();//读取数据
                //将字符串切割出来
                String[] splits = contentStr.split("##");
                String name = splits[0];
                String pwd = splits[1];
                //把name和pwd放入map中
                maps.put("name", name);
                maps.put("pwd", pwd);
                //关闭文件流
                fis.close();
                
                return maps;
            } catch (Exception e) {//读取信息异常
                System.out.println("用户名密码读取失败!");
                
                return null;
            }
        }
    }
    
    
    //方法的引用:
    //将用户名和密码保存到本地
      Boolean result = UserInfoUtils.saveInfo(MainActivity.this,nameStr, passwordStr);
      if (result) {
          Toast.makeText(MainActivity.this, "用户名密码保存成功!", 1).show();
      }else {
          Toast.makeText(MainActivity.this, "用户名密码保存失败!", 1).show();
      }
    
    //读取data/data 下存储的用户名和密码信息
      Map<String, String> maps = UserInfoUtils.readInfo(MainActivity.this);
      if (maps!=null) {//如果不为空
            //把name和pwd拿出来
            String name = maps.get("name");
            String pwd = maps.get("pwd");
            //赋值给控件
            et_name.setText(name);
            et_password.setText(pwd);
      }
    
    
    

    2.手机SD卡数据的存取操作:

    注意:往sd卡中写数据需要配置权限
    android.permission.WRITE_EXTERNAL_STORAGE

    //封装的保存和读取方法
    public class UserInfoUtils {
      
      //保存用户名和密码的方法
      public static boolean saveInfo(String userName,String pwd) {
          try {//尝试保存信息
              //将用户名和密码拼接成一个字符串
              String result = userName + "##" + pwd;
              //指定一个固定的写入路径
    //          File file = new File("/mnt/sdcard/info.txt");
              //获取sdcard的路径
              String sdPath = Environment.getExternalStorageDirectory().getPath();
              File file = new File(sdPath,"haha.txt");
              
              //创建文件输出流
              FileOutputStream fos = new FileOutputStream(file);
              //将内容写下来
              fos.write(result.getBytes());
              //关闭文件流
              fos.close();
              return true;
          } catch (Exception e) {//保存信息异常
              System.out.println("用户名密码保存失败!");
              return false;
          }
      }
      
      //读取用户的信息
      public static Map<String, String> readInfo() {
          try {//尝试读取信息
              //定义map
              Map<String, String> maps = new HashMap<String, String>();
              //指定一个固定的读取路径
    //          File file = new File("/mnt/sdcard/info.txt");
              //获取sdcard的路径
              String sdPath = Environment.getExternalStorageDirectory().getPath();
              File file = new File(sdPath,"haha.txt");
              
              //创建文件读取流
              FileInputStream fis = new FileInputStream(file);
              //将内容读取出来
              BufferedReader buf = new BufferedReader(new InputStreamReader(fis));
              String contentStr = buf.readLine();//读取数据
              //将字符串切割出来
              String[] splits = contentStr.split("##");
              String name = splits[0];
              String pwd = splits[1];
              //把name和pwd放入map中
              maps.put("name", name);
              maps.put("pwd", pwd);
              //关闭文件流
              fis.close();
              return maps;
          } catch (Exception e) {//读取信息异常
              System.out.println("用户名密码读取失败!");
              return null;
          }
      }
    }
    
    
    //方法的引用:
    //把数据保存到sd卡,需要先判断sd卡是否可用
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
      Toast.makeText(getApplicationContext(), "sd卡可用", 1).show();
      //[2.4]将用户名和密码保存到本地
      Boolean result = UserInfoUtils.saveInfo(nameStr, passwordStr);
          if (result) {
              Toast.makeText(MainActivity.this, "用户名密码保存成功!", 1).show();
      }else {
          Toast.makeText(MainActivity.this, "用户名密码保存失败!", 1).show();
      }
    }else {
      Toast.makeText(getApplicationContext(), "sd卡不可用", 1).show();
    }
      
    
    //读取sd卡中存储的用户名和密码信息
          Map<String, String> maps = UserInfoUtils.readInfo();
          if (maps!=null) {//如果不为空
              //把name和pwd拿出来
              String name = maps.get("name");
              String pwd = maps.get("pwd");
              //赋值给控件
              et_name.setText(name);
              et_password.setText(pwd);
          }           
    

    扩展:获取SD卡的空间大小(总大小、可用大小)

        //获取两个控件(总空间、可用空间)
            TextView tv_totalSize = (TextView) findViewById(R.id.textView1);
            TextView tv_userableSize = (TextView) findViewById(R.id.textView2);
            
            //获取sd卡的 总空间和可用空间
            File file = Environment.getExternalStorageDirectory();
            long totalSpace =  file.getTotalSpace(); //总空间:字节
            long usableSpace = file.getUsableSpace(); //可用空间:字节
            //空间大小转换为MB
            String totalStr = Formatter.formatFileSize(this, totalSpace);
            String usableString = Formatter.formatFileSize(this, usableSpace);
            
            //给控件赋值
            tv_totalSize.setText("SD卡的总空间为:"+ totalStr);
            tv_userableSize.setText("SD卡的可用空间为:"+ usableString);
    

    3偏好设置

    安卓里面的偏好设置为:SharedPreferences

    /**将用户名和密码保存到偏好设置中(SharedPreferences)
            name 会生成一个xml文件
            ode 四种模式(0私有、可读、可写...)
    */
        SharedPreferences sp = getSharedPreferences("config", 0);
        //获取偏好设置的编辑器
        SharedPreferences.Editor edit = sp.edit();
        //存数据:int long bool string
        edit.putString("name", nameStr);
        edit.putString("pwd", passwordStr);
        //点击提交编辑器
        edit.commit();
    
        //根据key找值,找不到返回一个默认值
        String name = sp.getString("name", "");
        String pwd = sp.getString("pwd", "");
        //赋值给控件
        et_name.setText(name);
        et_password.setText(pwd);
    

    相关文章

      网友评论

          本文标题:Android本地存取数据的操作、偏好设置

          本文链接:https://www.haomeiwen.com/subject/wabsyqtx.html