SharedPreferences存储+SD卡存储

SharedPreferences

须知

1、保存方式非常简单,以键值对的方式存储。 存储5种原始数据类型: boolean, float, int, long, String。
2、存储位置:data/data应用程序包名/shared_prefs/xxx.xml。
3、存储各种配置信息,游戏界面设置、音效设置、记住密码等。

 //已创建,不能直接创建数据,只能读  -  第二个参数指,只能被本应用使用
        SharedPreferences sp = getSharedPreferences("day8", Context.MODE_PRIVATE);

        //秘书存数据-删数据
        SharedPreferences.Editor edit = sp.edit();
        edit.putString("name","Asuna");//存数据
        edit.commit();//执行

        //删除
//        edit.remove("name");//根据键删除
//        edit.clear();//清空
//        edit.commit();

        //读数据
        username.setText(sp.getString("name","Amlv"));

SD卡存储

方法:
1、Environment.getExternalStorageState();// 返回主外部存储目录
2、Environment.getExternalStorageDirectory(); 获取SD卡的根目录
3、Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 获取SD卡公开目录pictures文件夹
注意事项:
存储SD卡位置:mnt/shell/emulated/0/文件名
必须在清单文件中写读写权限

	//读
	<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
	//写
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

java代码:

 public void click(View view) {
        Access(Manifest.permission.READ_EXTERNAL_STORAGE,1);//读 - 第二个参数自定义
        Access(Manifest.permission.WRITE_EXTERNAL_STORAGE,2);//写
    }
private void checkAccess(String access,int code) {
        //6.0以后获得网络授权
        //检查当前权限,若没有该权限,值为-1,若没有该权限,值为0
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) {
            //判断是否获得权限  第二个参数
            int i = ContextCompat.checkSelfPermission(getApplication(), access);
            if (i == PackageManager.PERMISSION_DENIED) {
                //获得授权

            }else{
                //没有获得授权,会弹出一个对话框(对话框是系统的,开发者不能自己定制),用户选择是否授权应用使用系统权限
                //第一个参数:上下文
                //第二个参数:需要授权的字符串数组
                //第三个参数:请求码requestCode,在回调方法中会用到 自定义
                ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},code);
            }
        }else{
            //6.0以前直接使用
            readJson();
        }

    }
    //不管用户是否选择授权,都会回调这个方法
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       //第一个参数:请求码,对应上述方法的第三个参数
        //第二个参数:请求权限数组
        //第三个参数:请求权限的结果数组
        if (requestCode==1) {
            if (permissions[0].equals(Manifest.permission.READ_EXTERNAL_STORAGE )&& grantResults[0] == PackageManager.PERMISSION_DENIED) {
                //授权成功

                writeJson();
            }else{
                //未获得授权
                finish();
            }
        }

    }
    //写数据
    private void writeJson() {
        Log.e("##########","开始写");
        new Thread(new Runnable() {
            @Override
            public void run() {
                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                    //获取SD卡根路径
                    File file = Environment.getExternalStorageDirectory();
                    FileOutputStream fos=null;
                    String str="正确存储";
                    Log.e("##########","文件路径"+file.getPath());
                    try {
                        fos=new FileOutputStream(new File(file,"day8.txt"));
                        fos.write(str.getBytes());
                        Log.e("##########","写入");
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                        str="文件未找到";
                    } catch (IOException e) {
                        e.printStackTrace();
                        str="传输错误";
                    }finally {

                            try {
                                fos.close();
                                Message message = new Message();
                                message.what=1;
                                message.obj="传输结束:"+str;
                                handler.sendMessage(message);

                            } catch (IOException e) {
                                e.printStackTrace();
                            }

                    }

                }
            }
        }).start();
    }
	//读数据
	private void readJson() {

        new Thread(new Runnable() {
            @Override
            public void run() {
                if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                    File file = Environment.getExternalStorageDirectory();
                    FileInputStream fis=null;
                    StringBuffer sb = new StringBuffer();

                    try {
                        fis=new FileInputStream(new File(file,"day8.txt"));
                        byte[] bys=new byte[1024];
                        int len=0;
                        while((len=fis.read(bys))!=-1){
                            sb.append(new String(bys,0,len));
                        }
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }finally {
                        if (fis!=null) {
                            try {
                                fis.close();
                                Message message = new Message();
                                message.what=2;
                                message.obj=sb.toString();
                                handler.sendMessage(message);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }

                }
            }
        }).start();
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值