Android SharedPreferences存储+SD卡存储

SharedPreferences介绍

SharedPreferences简称Sp,是一种轻量级的数据存储方式,采用Key/value的方式 进行映射,最终会在手机的/data/data/package_name/shared_prefs/目录下以xml的格式存在。
Sp通常用于记录一些参数配置、行为标记等!因为其使用简单,所以大多数开发者用起来很爽!
但是 请注意:千万不要使用Sp去存储量大的数据,也千万不要去让你的Sp文件超级大,否则会大大影响应用性能, 甚至出现ANR(程序无响应)

特点:

1.保存少量的数据,且这些数据的格式非常简单。 存储5种原始数据类型: boolean, float, int, long, String
2.比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),记住密码功能,音乐播放器播放模式。

使用方式

步骤1:
得到SharedPreferences对象 getSharedPreferences(“文件的名称”,“文件的类型”);
(1).Context.MODE_PRIVATE:指定该SharedPreferences数据只能被应用程序读写
(2)MODE_APPEND:检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
以下不在建议使用
(3).Context.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他
应用程序读,但不能写。
(4).Context,MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序写,但不能读。
步骤2:
得到 SharedPreferences.Editor编辑对象
SharedPreferences.Editor editor=sp.edit();
步骤3:
添加数据
editor.putBoolean(key,value)
editor.putString()
editor.putInt()
editor.putFloat()
editor.putLong()
步骤4:
提交数据 editor.commit()或者apply()(推荐用这个.异步提交)
Editor其他方法: editor.clear() 清除数据 editor.remove(key) 移除指定key对应的数据

sp写数据

 //SP写数据
    private void write() {
        //TODO  1:得到SharedPreferences对象
        //参数一 xml文件的名字 参数二 模式 MODE_PRIVATE 指定该SharedPreferences数据只能被本应用程序读写
        SharedPreferences preferences = getSharedPreferences("songdingxing", MODE_PRIVATE);
        //TODO 2:获得编辑对象
        SharedPreferences.Editor editor = preferences.edit();
        //TODO 3:写数据
        editor.putString("username","哈哈哈");
        editor.putInt("age",18);
        editor.putBoolean("isMan",false);
        editor.putFloat("price",12.4f);
        editor.putLong("id",5425054250l);
        //TODO 4:提交数据
        editor.commit();
    }

sp读数据

步骤1:得到SharedPreferences对象 getSharedPreferences(“文件的名称”,“文件的类型”);
步骤2:读取数据 String msg = sp.getString(key,defValue);

//读数据
    private void read() {
        //TODO  1:得到SharedPreferences对象
        //参数一 xml文件的名字 参数二 模式 MODE_PRIVATE 指定该SharedPreferences数据只能被本应用程序读写
        SharedPreferences preferences = getSharedPreferences("sgf", MODE_PRIVATE);
        //TODO 2:直接读取
        //参数一 键  参数二 找不到的时候给默认值
        String username=preferences.getString("username","");
        int age=preferences.getInt("age",0);
        boolean isMan=preferences.getBoolean("isMan",false);
        float price=preferences.getFloat("price",0.0f);
        long id=preferences.getLong("id",0l);
        Toast.makeText(this, username+":"+age+":"+isMan+":"+price+":"+id, Toast.LENGTH_SHORT).show();
    }

内部文件存储

写数据

 FileOutputStream fileOutputStream = null;
                try {
                    fileOutputStream = openFileOutput("aa.json", MODE_PRIVATE);
                    fileOutputStream.write("hello".getBytes());
                    fileOutputStream.flush();
                    fileOutputStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

写数据

 FileInputStream fileInputStream = null;
        try {
            fileInputStream= openFileInput("aa.json");
            byte[] b = new byte[1024];
            int len = 0;
            while((len = fileInputStream.read(b)) != -1){
                Log.i(TAG, "onClick: "+new String(b,0,len));
            }

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

外部文件存储(SD卡)

SD卡介绍:
一般手机文件管理 根路径 /storage/emulated/0/或者/mnt/shell/emulated/0
在这里插入图片描述

重要代码:
(1)Environment.getExternalStorageState();// 判断SD卡是否
(2)Environment.getExternalStorageDirectory(); 获取SD卡的根目录
(3)Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 获取SD卡公开目录pictures文件夹

必须要添加读写SD卡的权限

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

写和读

public class Main2Activity extends AppCompatActivity {
    private Button write1;
    private Button read;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        write1 = (Button) findViewById(R.id.write);
        read = (Button) findViewById(R.id.read);

        //动态添加权限
        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 100);
    }

    //权限监听器
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 100 & grantResults[0] == PackageManager.PERMISSION_GRANTED) {      //确认允许
            write1.setOnClickListener(new View.OnClickListener() {            //写
                @Override
                public void onClick(View view) {
                    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {   //是否有sd卡
                        File externalStorageDirectory = Environment.getExternalStorageDirectory();   //路径
                        try {
                            FileOutputStream fileOutputStream = new FileOutputStream(new File(externalStorageDirectory, "one.txt"));    //路径+文件名
                            fileOutputStream.write("sadas".getBytes());           //写入数据
                            fileOutputStream.flush();
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });

            read.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String externalStorageState = Environment.getExternalStorageState();
                    if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
                        File externalStorageDirectory = Environment.getExternalStorageDirectory();         //路径
                        try {
                            FileInputStream fileInputStream = new FileInputStream(new File(externalStorageDirectory, "one.txt"));  //读的流
                            byte[] bytes = new byte[1];
                            StringBuffer str = new StringBuffer();
                            int len = -1;
                            while ((len = fileInputStream.read(bytes)) != -1) {
                                str.append(new String(bytes, 0, len));
                            }
                            String s = str.toString();
                            Toast.makeText(Main2Activity.this, s, Toast.LENGTH_SHORT).show();
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
        } else {              //否则关闭页面
            finish();
        }
    }
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值