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(); }
- GeekBand 第五周开发
- GeekBand--第五周分享
- C++ 函数重载【GeekBand 第五周】
- GeekBand C++ STL与泛型编程 第五周笔记
- GeekBand笔记-《STL与泛型编程 》 第五周
- GeekBand第一周开发
- GeekBand第四周开发
- geekband android #5 第五周分享(数据持久化技术)
- Geekband第二周1.1
- Geekband第二周 1.2
- GeekBand--第二周分享
- GeekBand--第三周分享
- GeekBand--第六周分享
- GeekBand--第七周分享
- GeekBand--第八周分享
- GeekBand--第九周分享
- GeekBand第三周
- GeekBand 第七周笔记
- 策略模式
- codeforces 679 B
- C++ heap学习
- 基于mysql的hive安装配置(apache-hive-2.0.1-bin.tar.gz)
- 【GOF23设计模式】_组合模式_树状结构_杀毒软件架构_JUnite底层架构JAVA239
- GeekBand 第五周开发
- 用JavaScript实现简单的计算器
- python的GUI编程--wxpython学习(二)--基本控件和事件
- Html中的form对象
- java笔记
- eclipse:清除eclipse中 Runnable JAR file 的历史记录
- scikti-learn学习
- composer安装
- 网页简单的上下切换轮播