首页 > 代码库 > Android简单介绍SharedPreference,内部文件,sdcard数据存储

Android简单介绍SharedPreference,内部文件,sdcard数据存储

SharedPreference

  以xml的结构储存简单的数据,储存在data/data/程序包名/shared_prefs文件夹中

  使用方式     

    创建对象的方式有三种

      Context 的 getSharedPreferences()

      Activity 的 getPreferences()

      PreferenceManager 的 getDefaultSharedpreferences()

    获取数据

      sharedPrefs.getXXX()方法,如getInt(),getString()等

    储存数据  获取Editor对象 sharedPrefs.edit();

    存入数据  editor.putXXX()方法,如putInt()、putString()

    提交要保存的数据    editor.commit()

技术分享

我们通过路径找文件 看一下运行结果 路径我在上面已经提到了  我使用的是Genymotion测试   

访问手机内部存储需要root权限才可以访问

技术分享

 

技术分享技术分享技术分享

 

技术分享技术分享

 

 技术分享技术分享技术分享

 

 

 

内部存储

    将数据保存在内存空间中,数据用户不能轻易访问的区域,访问需要root权限。存储在/data/data/程序包名/files文件夹下

  使用方式

    其使用还是要通过FileInputStream和FileOutputStream对文件File进行操作,只不过不是通过他们的构造方法来创建。

  获取FileInputStream

    FileInputStream fis = openFileInput();        (Activity的方法)

    FileOuputStream fos = openFileOutput();         (Activity的方法)

      文件File将会自动创建

技术分享技术分享

 

外部SDCard存储

在操作sd卡的时候需要在清单文件中添加权限

技术分享

 

将数据保存到SDCard卡中,任何程序都可以访问,用户也很容易查看、修改。

  使用方式

    通过FileInputStream和FileOutputStream对文件File进行操作。

  SDCard操作类Environment      进行SDCard状态获取

    Environment.getExternalStorageState();    获取扩展卡状态

    Environment.MEDIA_MOUNTED    安装的并可读写

    Environment.MEDIA_MOUNTED_READ_ONLY    安装的但只读

    Environment.MEDIA_REMOVED        移除的

  获取常用文件夹路径

    Environment.getExternalStorageDirectory();    获取扩展卡根文件夹

 这个路径在sd卡下自己写  找不到 只能轻轻说声加油~

 

贴一个小demo

运行效果

在edittext 输入文本点击写入按钮   点击读取显示到textview      重要的事情说三遍   加权限~加权限~加权限~

技术分享

 

activity_main.xml

  

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context="com.example.lesson15_data_storage.MainActivity">    <CheckBox        android:id="@+id/push"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="是否追加到原文件末尾"/>    <EditText        android:id="@+id/edit"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <TextView        android:id="@+id/text_view"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="显示文本"/>    <Button        android:id="@+id/inner_storage"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="保存文本到内部存储中"        android:onClick="onClick"/>    <Button        android:id="@+id/inner_read"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="读取内部存储的文本到TextView"        android:onClick="onClick"/>    <Button        android:id="@+id/outter_read"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="读取扩展卡的文本到textview"/>    <Button        android:id="@+id/outter_write"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="onClick"        android:text="将文本写入到扩展卡中"/></LinearLayout>

 

MainActivity

  

public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private CheckBox cbPush;    private TextView textView;    private EditText edit;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        cbPush= (CheckBox) findViewById(R.id.push);        textView= (TextView) findViewById(R.id.text_view);        edit= (EditText) findViewById(R.id.edit);        getSharedPreferences();    }    /**     * 存储一个CheckBox的选中状态     */    private void getSharedPreferences() {        //Context获取  参数1文件名  参数2文件权限        SharedPreferences preferences=getSharedPreferences("setting", Context.MODE_PRIVATE);        //activity获取  文件名是当前活动名        SharedPreferences preferences1=getPreferences(MODE_PRIVATE);        //获取editor对象        SharedPreferences.Editor editor1=preferences1.edit();        //保存数据        editor1.putString("text","通过activity对象获取");        //提交数据        editor1.commit();        //PreferenceManager获取  文件名自动生成 访问权限默认私有        PreferenceManager.getDefaultSharedPreferences(MainActivity.this)                .edit()                .putString("text","通过PreferenceManager获取")                .commit();        //参数1 key  参数2 默认值 基本数据类型要求不可以为空 所以必须有默认值        boolean checked=preferences.getBoolean("cbPush",false);        cbPush.setChecked(checked);        cbPush.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                //通过context获取 参数1 存储的文件名  参数2 数据的访问权限                SharedPreferences sharedPreferences=getSharedPreferences("setting", Context.MODE_PRIVATE);                //获取编辑器对象                SharedPreferences.Editor edit=sharedPreferences.edit();                //存入数据                edit.putBoolean("cbPush",isChecked);                //提交修改                edit.commit();            }        });    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.inner_storage:                write();//写入到内部文件                Toast.makeText(MainActivity.this,"写入成功",Toast.LENGTH_SHORT).show();                break;            case R.id.inner_read:                read();//读取内部文件                Toast.makeText(MainActivity.this,"读取成功",Toast.LENGTH_SHORT).show();                break;            case R.id.outter_read:                oread();//读取sdcard文件                Toast.makeText(MainActivity.this,"读取成功",Toast.LENGTH_SHORT).show();                break;            case R.id.outter_write:                owrite();//写入sdcard文件                Toast.makeText(MainActivity.this,"写入成功",Toast.LENGTH_SHORT).show();                break;        }    }    private void oread() {        String state=Environment.getExternalStorageState();        try {            //判断是否读写 或只读            if(state.equals(Environment.MEDIA_MOUNTED)||state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)){                File sdcardRoot=Environment.getExternalStorageDirectory();                File read=new File(sdcardRoot,"my/text.txt");                if(read.exists()){                    FileInputStream fis=new FileInputStream(read);                    //字节转字符会进行字节编码的转换  new InputStreamReader(fis,"utf-8") android默认utf-8                    BufferedReader reader=new BufferedReader(new InputStreamReader(fis));                    String str=reader.readLine();                    textView.setText(str);                    reader.close();                    fis.close();                }            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    private void owrite() {        try {            //获取扩展卡状态            String state= Environment.getExternalStorageState();            //是否可读写            if(state.equals(Environment.MEDIA_MOUNTED)){                //获取扩展卡文件夹目录                File sdcardRoot=Environment.getExternalStorageDirectory();                File save=new File(sdcardRoot,"my/text.txt");                //判断文件是否存在                if (save.exists()){                }else{                    //判断父级文件夹是否存在                    if(!save.getParentFile().exists()){                        //创建文件夹                        save.getParentFile().mkdirs();                    }                    //创建文件                    save.createNewFile();                }                String text=edit.getText().toString();                //文件是否在原文件末尾追加 cbPush.isChecked() checkbox 是否选中                FileOutputStream fos=new FileOutputStream(save,cbPush.isChecked());                fos.write(text.getBytes("utf-8"));                fos.flush();                fos.close();//                //是否是文件夹//                save.isDirectory();//                //是否是文件//                save.isFile();//                //是否是隐藏文件  文件名以  .开头的文件//                save.isHidden();//                //获取所有子文件的文件名数组//                save.list();//                //获取所有子文件的文件数组//                save.listFiles();            }        } catch (IOException e) {            e.printStackTrace();        }    }    private void read() {        try {            //读取写入的文件            FileInputStream fis=openFileInput("text.txt");            int len=-1;            byte [] b=new byte[1024];            ByteArrayOutputStream bos=new ByteArrayOutputStream();            while ((len=fis.read(b))!=-1){                bos.write(b,0,len);            }            textView.setText(bos.toString("utf-8"));            bos.close();            fis.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    private void write() {        try {            //获取输入框内容            String text=edit.getText().toString();            //判断是否为空            if(TextUtils.isEmpty(text))return;            //写入方式  追加或覆盖            int mode=cbPush.isChecked()?MODE_APPEND:MODE_PRIVATE;            //获取FileOutputStream            FileOutputStream fos=openFileOutput("text.txt",mode);            //字符串转换为byte 写入文件            fos.write(text.getBytes("utf-8"));            fos.flush();            fos.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}

 

Android简单介绍SharedPreference,内部文件,sdcard数据存储