GeekBand--第五周分享

sharedPreferences与文件管理

sharedPreferences 是什么?

是数据持久化,就是把数据存储起来。适用于存储简单的数据

     //系统会自动创建一个XML文件,名字为   preference_name  Shard_Prefs
       SharedPreferences mSharedPreferences  = ListViewDemoActivity.this.getSharedPreferences("preference_name",Context.MODE_PRIVATE);
       SharedPreferences.Editor mEditor = mSharedPreferences.edit();
       mEditor.putInt("list_view_data_counts",dataCounts);
      //data/data
       mEditor.commit();//注意需要提交

以上就是把数据存储起来,如果需要提取存储的数据

       SharedPreferences mSharedPreferences  = ListViewDemoActivity.this.getSharedPreferences("preference_name",Context.MODE_PRIVATE);

       mDataCounts =  mSharedPreferences.getInt("list_view_data_counts);

修改就是再传进去不同的值 mEditor.putInt("list_view_data_counts",dataCounts+1);

删除就是 mEditor.remove();

PS:最好用 mEditor.apply();提交

因为

         mEditor.apply();//后台写数据,另开线程,可以让UI界面更快速的响应

       //和网络相关,和IO操作相关,要用异步

随心所欲的管理文件

getFilesDir(): 返回一个File,代表了我们app的internal目录。

getCacheDir():返回一个File,代表了我们app的internal缓存目录。

       private void testFileDemo(){
             //创建一个文件叫text.txt,在internal目录
             File file = new File(getFilesDir(),"text.txt");
             try {
                 file.createNewFile();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }

再在文件中写数据

                 try {
                 FileOutputStream fileOutputStream  = openFileOutput("text.txt", Context.MODE_PRIVATE);
                 try {
                     fileOutputStream.write(s.getBytes());
                     fileOutputStream.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             } catch (FileNotFoundException e) {
                 e.printStackTrace();
             }
         }

操作sd卡目录下的文件

 void testSDcard(){
    File file = new File("/sdcard/text/a.txt");
    String tempFile = Environment.getExternalStorageDirectory().getAbsolutePath();
    Environment.getDataDirectory();//获取android的data目录
    Environment.getDownloadCacheDirectory();//获取下载的缓存目录

}

操作assets目录下的文件

   void testAssets{
    //保存文件
    WebView webView = new WebView(this);
    webView.loadUrl("file://android_asset/test.html");

    try {
        //open的只能是文件不能是文件夾
        getResources().getAssets().open("test.html");//讀取文件
    } catch (IOException e) {
        e.printStackTrace();
    }
    //读列表
    try {
        String[] fileNames = getAssets().list("images");
    } catch (IOException e) {
        e.printStackTrace();
    }

    InputStream inputStream = null;
    try {
       // 读图片
        inputStream = getAssets().open("images/dog.jpg");

        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
        ImageView imageView = new ImageView(this);
        imageView.setImageBitmap(bitmap);
        //读音频
        AssetFileDescriptor assetFileDescriptor = getAssets().openFd("libai.mp3");
        MediaPlayer player = new MediaPlayer();
        player.reset();
        player.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
        player.prepare();
        player.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

操作res目录下的文件

   void testResFile(){
    InputStream inputStream = getResources().openRawResource(R.raw.libai);
    getResources().getColor(R.color.colorAccent);
}

操作raw目录下的文件

   和res操作是一样的

PS:asset和raw异同点
assets和raw 不会编译成二进制,都打包

assets是原封不动的,raw会映射到R.java文件里面,所以可以通过id去访问

你可能感兴趣的:(学习心得,数据存储,存储)