SharedPreferences存储总结

SharedPreferences存储

1.内部存储

  • 地址:date/date/项目包名(和当前项目有关)
  • 特点:随着APP的卸载而消失
  • 应用:存一些用户的状态,少量的数据,以键值对来存取

SharedPreferences的四种操作权限
在这里插入图片描述
内部存储的存取操作

//写入内部存储
    public void writeDatas(){
        //获取SharedPreferences往内存里写数据                        存储的文件名  操作权限
        SharedPreferences sharedPreferences = getSharedPreferences("123",MODE_PRIVATE);
        //获取写入数据的方法
        SharedPreferences.Editor editor = sharedPreferences.edit();

        //写入单条数据  可以存入多种类型String,Int,Boolean,Float,Long,StringSet
        editor.putString("name","张三2");
        editor.putInt("age",19);
        //一次存入多条数据
        Set<String> names = new HashSet<>();
        names.add("1");
        names.add("2");
        names.add("3");
        editor.putStringSet("keySet",names);
        //最后要提交一下事务,不然数据不会存入到文件里
        editor.commit();
    }

    //读取内部存储
    public void readDates(){
        //获取SharedPreferences往内存里写数据                        存储的文件名  操作权限
        SharedPreferences sharedPreferences = getSharedPreferences("123", MODE_PRIVATE);
        //通过键名获取内容:  第一个参数是键名,第二个参数是默认值
        String string = sharedPreferences.getString("name", null);
        Set<String> keySet = sharedPreferences.getStringSet("keySet", null);
        //如果获取Set集合使用foreach
        for (String s:keySet
             ) {
            Log.i("---",s);
        }
        Log.i("---",string);
    }

2.外部存储

  • 地址:storage/emulated/0
  • 特点:APP被卸载数据不会消失
  • 应用:存取文件,操作SD卡,如果SD卡状态不对则不能读写数据

执行外部存储操作前要先添加静态权限

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

如果添加了静态权限还不能执行外部存储的操作,则可能是SDK
卡的版本不对就得添加动态权限,这里建议直接添加上动态权限

//判断SDK卡的版本
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
      	String[] strings = new String[]{
             Manifest.permission.READ_EXTERNAL_STORAGE,
             Manifest.permission.WRITE_EXTERNAL_STORAGE};
        this.requestPermissions(strings,100);
 }

外部存储的存取操作

//存到外部存储
public void saveFie(){
    //判断SD卡状态
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        try {
            //获取外部存储的根目录
            String sdpath = Environment.getExternalStorageDirectory().getPath();
            //使用文件输入流将数据存入外部存储
            FileOutputStream fileOutputStream = new FileOutputStream(sdpath+"/a.txt");
            fileOutputStream.write("123123".getBytes());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

//读外部存储
public void readFile(){
    //判断SD卡状态
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        //这边直接明确要读取的文件的位置
        File file = new File(Environment.getExternalStorageDirectory().getPath()+"/a.txt");
        try {
            //使用文件输出流
            FileInputStream fis = new FileInputStream(file);
            int len = 0;
            byte[] bys = new byte[1024];
            StringBuffer stringBuffer = new StringBuffer();
            while((len = fis.read(bys)) != -1){
                //将内容拼接起来
                stringBuffer.append(new String(bys,0,len));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

//下载文件到外部存储
public void downloadimg(){
    try {
        URL url = new URL("http://attach.bbs.miui.com/forum/201204/17/1539083wxpexg5b0fbvzpv.jpg");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        if (connection.getResponseCode()==200){
            InputStream is = connection.getInputStream();
            FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory().getPath()+"/img.jpg");
            int len = 0;
            byte[] bys = new byte[1024];
            //在要获取网络数据的时候判断SD卡的状态
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                while((len = is.read(bys)) != -1){
                    fos.write(bys,0,len);
                }
            }
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值