GeekBand 第五周开发

第五周的内容不是很多,主要是学习持久化存储,从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.txt
File 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();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值