GeekBand 第五周开发

来源:互联网 发布:超级大傻瓜软件 编辑:程序博客网 时间:2024/04/30 00:47

第五周的内容不是很多,主要是学习持久化存储,从SharedPreferences ,到随心所欲的管理文件夹。
一、SharedPreferences
是一个轻量级的存储类,用来保存一些应用的常用配置。它可以用来进行数据间的共享,包括程序之间,或同一程序的不同组件。在Android系统中它以XML的形式保存, /data/data/PACKAGE_NAME/shared_prefs目录下。
创建,需要sharedPreferences对象,它的内部类Editor对象来执行相关操作

SharedPreferences sharedPreferences=getSharedPreferences("preference_name", Context.MODE_PRIVATE);SharedPreferences.Editor editor=sharedPreferences.edit();

1.增,用键值对的方式存储

editor.putInt("list_view_count",count);

2.删,提供键就可以删除相对应的数据

editor.remove("list_view_count");

3.改,提供相同的键,不同的值,后值覆盖前值。

editor.putInt("list_view_count",count+1);

4.查,通过键得到数据,设默认值。

count=sharedPreferences.getInt("list_view_count",3);

5.提交,两种方式

editor.commit();editor.apply();

两种提交方式选择一种即可,commit马上提交,apply在背后线程提交。推荐第二种方式。

获取SharedPreferences的两种方式:
1 调用Context对象的getSharedPreferences()方法
2 调用Activity对象的getPreferences()方法
两种方式的区别:
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.

SharedPreferences的四种操作模式:
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.

SharedPreferences,是一种持久化的方式,操作方式也比较简单。值得推荐。

二、如何管理好文件
Internal storage 内部存储 ,External storage 外部存储。应用本身就可以进行内部存储写入与读取的能力
写入 外部存储的权限

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

读取外部存储的权限

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

getFilesDir(),返回一个File,代表了我们的app的internal目录
getCacheDir(),返回一个File,代表我们的app的internal的缓存目录
新建一个文件

//  创建一个文件 test.txtFile file=new File(getFilesDir(),"test.txt");Log.i("xyy","路径:"+getFilesDir().getAbsolutePath());Log.i("xyy","路径file:"+file.getAbsolutePath());try {   boolean isSuccess=file.createNewFile();} catch (IOException e) {   e.printStackTrace();}    打印的日志:路径:/data/data/com.exa.sharedpreferencedemo/files路径file:/data/data/com.exa.sharedpreferencedemo/files/test.txt

另一种创建文件方式,往文件里写入数据

String string="Our teacher is handsome"; try {           /*得到输出流*/            FileOutputStream fileOutputStream=openFileOutput("test2.txt",Context.MODE_PRIVATE);     try {          fileOutputStream.write(string.getBytes());          fileOutputStream.close();      } catch (IOException e) {          e.printStackTrace();      }} catch (FileNotFoundException e) {   e.printStackTrace();}

检查外部存储

//  检查 External是否可用String state= Environment.getExternalStorageState();   if(TextUtils.equals(state,Environment.MEDIA_MOUNTED));

文件是默认存储在/data/data//files/目录下
读取文件数据

  public String load(){       FileInputStream in=null;       BufferedReader reader=null;       StringBuilder content=new StringBuilder();       try {           /*得到输入流*/           in=openFileInput("test2.txt");           reader=new BufferedReader(new InputStreamReader(in));           String line="";           while ((line=reader.readLine())!=null) {               content.append(line);           }       }  catch (IOException e) {           e.printStackTrace();       }finally {           if(reader!=null){               try {                   reader.close();               } catch (IOException e) {                   e.printStackTrace();               }           }       }       return content.toString();   }

读取各目录下的文件
读取assets文件内的东西

//    读取assets文件内的东西    void testAssets(){//        第一种,直接读路径        WebView webView=new WebView(this);        webView.loadUrl("file///android_asset/.test.html");//      读取html,assets文件内的        try {            //得到输入流,可以进行读取操作。            InputStream inputStream= getResources().getAssets().open("test.html");        } catch (IOException e) {            e.printStackTrace();        }//        try {//            读列表            String[] fileNames=getAssets().list("images/");//           读取图片,得到输入流            InputStream inputStream=getAssets().open("images/dog.jpg");//            将输入流转为 位图            Bitmap bitmap= BitmapFactory.decodeStream(inputStream);            ImageView imageView=new ImageView(this);            imageView.setImageBitmap(bitmap);        } catch (IOException e) {            e.printStackTrace();        }//      读音乐        try {            AssetFileDescriptor assetFileDescriptor=getAssets().openFd("xiaohongchen.mp3");            MediaPlayer mediaPlayer=new MediaPlayer();            mediaPlayer.reset();            mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(),                                        assetFileDescriptor.getStartOffset(),                                        assetFileDescriptor.getLength());            mediaPlayer.prepare();            mediaPlayer.start();        } catch (IOException e) {            e.printStackTrace();        }    }

读取raw文件内东西,raw里面不能有目录结构。 raw会给资源文件在R文件一个索引

 void testResFile(){   // 得到输入流,可以进行读取操作。        InputStream inputStream=getResources().openRawResource(R.raw.xiaohongchen);    }

assets与raw文件内的东西,都不会编译。

读取SD卡

    void testSDCard(){        File file=new File("");        String tempPath=Environment.getExternalStorageDirectory().getAbsolutePath();//        获取android中的data目录        Environment.getDataDirectory();//        获取下载的缓存目录        Environment.getDownloadCacheDirectory();    }
0 0
原创粉丝点击