assets、raw(文件夹、作用,区别) 、 SharedPreference(存放配置信息)

这篇博客探讨了Android中数据存储的几种方式,包括将数据保存到`dadadadaapk名files`目录下,读取内存卡文件的步骤,以及详细介绍了assets和raw文件夹的用途和区别。同时,文章详细讲解了SharedPreferences如何用于存储配置信息,包括写入、读取的步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

保存数据到dada\dada\apk名\files

  • 写入和读取内存中的文件,写到apk中的文件夹files中,只有Root的手机才能查看系统文件
public void onClick(View v) { //这里我是利用一个点击事件做的测试

        switch (v.getId()){
            case R.id.bt_mian_one: //如果是保存
                try {//此文件被存放在,内存目录中,如果文件没有,会自动创建
                    // openFileOutput此方法是Activity特有的写入方法
                    //参数一被读取的文件名,参数二:读取模式,读取自己的采用私有模式
                    FileOutputStream fileOutputStream=openFileOutput(editTextone.getText().toString(), Context.MODE_PRIVATE);
                    BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(fileOutputStream);
                    //把值写入文件,write 可以从指定Bytes数组位置开始写到Bytes数组指定位置
                    bufferedOutputStream.write(editTexttwo.getText().toString().getBytes());
                    //关闭写入
                    fileOutputStream.flush();
                    bufferedOutputStream.flush();
                    fileOutputStream.close();
                    Toast.makeText(this, "写入完成", Toast.LENGTH_SHORT).show();
                    bufferedOutputStream.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
             break;

            case R.id.bt_mian_two://如果是读取
                try {
                    FileInputStream fileInputStream=openFileInput(editTextone.getText().toString());
                    //此处我使用字节流读取(字符串),平时推荐使用字节流
                    //字节输入流转换成字符输入流
                    InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream);
                    BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
                    editTexttwo.setText(bufferedReader.readLine());

                   //关闭流

                    fileInputStream.close();
                    inputStreamReader.close();
                    bufferedReader.close();
                    Toast.makeText(this, "读取完成", Toast.LENGTH_SHORT).show();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
        }


    }


读取内存卡中的文件

  • 首先,你必须设定权限,文件会创建在你指定的位置
  • 然后,在读取内存的文件的方法的基础上,把读取的源方法换成
  • FileOutputStream fileout=new FileOutputStream(“/mnt/sdcard/被读取的文件名”);

设定读写内存卡的权限

打开 AndroidManifest.xml 写入如下代码

 <!--创建文件,和删除文件系统的权限-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
    <!--文件,读取权限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
    <!--文件写入权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


public void onClick(View v) { //这里我是利用一个点击事件做的测试

        switch (v.getId()){
            case R.id.bt_mian_one: //如果是保存
                try {
                    //设定被读取文件的路径             
  FileOutputStream fileout=new FileOutputStream("/mnt/sdcard/被读取的文件名");
                    BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(fileout);
                    //把值写入文件,write 可以从指定Bytes数组位置开始写到Bytes数组指定位置
                    bufferedOutputStream.write(editTexttwo.getText().toString().getBytes());
                    //关闭写入
                    fileOutputStream.flush();
                    bufferedOutputStream.flush();
                    fileOutputStream.close();
                    Toast.makeText(this, "写入完成", Toast.LENGTH_SHORT).show();
                    bufferedOutputStream.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
             break;

            case R.id.bt_mian_two://如果是读取
                try {
FileInputStream fileInputStream=FileInputStream("/mnt/sdcard/被读取的文件名");
 //此处我使用字节流读取(字符串),平时推荐使用字节流
  //字节输入流转换成字符输入流
  InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream);

BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
                    editTexttwo.setText(bufferedReader.readLine());

                   //关闭流

                    fileInputStream.close();
                    inputStreamReader.close();
                    bufferedReader.close();
                    Toast.makeText(this, "读取完成", Toast.LENGTH_SHORT).show();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
        }


    }

assets及raw

作用

  • 这个二个文件夹,都可以放置 外部资源(例如:字体、视屏、音频 等。。)

区别

assetsraw
建立main文件夹内,此文件夹内的文件存储在手机中的内存卡中,推荐放置一些较大文件此文件夹建立在res文件内,里面可以存放的文件类型和assets一样,此文件内的,文件都存在于内存中,即程序开启就加载入内存了,故此,文件内的文件都会被R文件编写,生成变量,所以不推荐,放置大文件!!


读取

assets(内部文件,存在于手机内存卡中)raw(内部文件,存在于手机内存中)
取到assets文件夹,然后读取内部文件getResources()取到资源,然后再取到raw文件内的,被读取的文件,文件在raw中被R类加载了。
InputStream inputstram=getAssets().open(被读取的文件名);FileInputStream fileinputstream=getResources().openRawResource(R.rwa.被读取的文件);


SharedPreferences (存放配置信息)

存放,一些你的设置

  • 取到getSharedPreferences(“配置文件名”,Context.MODE_PRIVATE); 参数二:模式类型,私有。
  • 取到配置文件的编辑器,SharedPreferences.Editor editor = sharedpreferences.edit();
  • 通过编辑器,设值:editor.putString(“键”,”存入的值”);
  • 提交编辑器的操作: editor.commit(); //重点
  • 通过键取出配置文件内的值:sharedpreferences.getString(“键”,”默认值,意思是,如果没有取到,就返回该值”);

方法图

  • 写入的方法,根据需求使用

这里写图片描述

  • 取值的方法,根据需求使用

这里写图片描述


//取到设置配置文件,没有会自动创建
 SharedPreferences sharedpreferences=getSharedPreferences("ces",Context.MODE_PRIVATE);
 //取到,编辑器,用来写数据,到配置文件中
  SharedPreferences.Editor      editor = sharedpreferences.edit();
//从配置文件中,通过键取到保存的值  sharedpreferences.getString("键","默认值,意思是,如果没有取到,就返回该值");

 //取配置 文件中的值        editTextone.setText(sharedpreferences.getString("标题",""));    editTexttwo.setText(sharedpreferences.getString("内容",""));

 //多选 选中事件       check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
//通过编辑器,给配置设定  键,及存入的值!!                
                    editor.putString("标题","存入的值");
                    editor.putString("内容",editTexttwo.getText().toString());
//存完后记得提交,这个是重点,否者无效                    
                    editor.commit(); //重点
                }
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值