SharedPreferences与文件存储

Slides:



Advertisements
Similar presentations
面向侧面的程序设计 方林博士 本文下载地址:
Advertisements

单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
项目6 通用堆栈.
数据存储.
第13章 繪圖與多媒體 13-1 顯示圖檔-行動相簿 13-2 音樂播放-音樂播放器 13-3 影片播放-視訊播放器
MVC Servlet与MVC设计模式.
實驗五:多媒體播放器選單介面.
Part 2 開發Android應用程式的流程
第一章 面向对象程序设计.
位置與地圖應用 此投影片為講解Android如何取得定位經緯度和使用Google Map地圖.
Oracle数据库 Oracle 子程序.
第二章 JAVA语言基础.
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
目标 运用File类进行文件操作 理解流,标准输入/输出流的概念
在PHP和MYSQL中实现完美的中文显示
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
第7章 Android文件与本地数据库(SQLite)
Chapter 13 Android 實戰演練.
Android + JUnit 單元測試 建國科技大學資管系 饒瑞佶 2012/8/19V4.
實驗十三:顯示目前經緯度位置.
Signutil.
Hadoop I/O By ShiChaojie.
第11章 Android GPS位置服务与地图编程
Java基础 JavaSE异常.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
第8章 Android内容提供者(ContentProvider)应用
Ch5 Android應用程式的主要組成.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
2018/12/3 面向对象与多线程综合实验-输入输出流 教师:段鹏飞.
Java语言程序设计 第五部分 Java异常处理.
第10章 儲存偏好設定、檔案與資料庫 10-1 存取偏好設定 10-2 檔案存取 10-3 關聯式資料庫與SQLite
大学计算机基础 典型案例之一 构建FPT服务器.
實驗十四:顯示與控制地圖.
SVN服务器的搭建(Windows) 柳峰
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
辅导课程六.
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
2019/1/13 面向对象与多线程综合实验-输入输出流 教师:段鹏飞.
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第五讲 JSP中的文件操作(1) 教学目的 本讲主要讲述JSP中使用Java输入、输出流实现文件的读写 操作 。 知识要点
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
實驗十一:待辦事項程式 (儲存在手機上).
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
SOA – Experiment 2: Query Classification Web Service
Ch17 SharedPreference與檔案應用
實驗九:延續實驗八, 製作一個完整音樂播放器
Location Based Services - LBS
姚金宇 MIT SCHEME 使用说明 姚金宇
Lab17 程序设计B班
第二章 Java语法基础.
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Visual Basic程序设计 第13章 访问数据库
第二章 Java基本语法 讲师:复凡.
第16章 天气预报 --Web Service调用
Python 环境搭建 基于Anaconda和VSCode.
Google的云计算 分布式锁服务Chubby.
第2章 Java语言基础.
第9章 BroadcastReceiver的使用
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
第四章 UNIX文件系统.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
JUDDI安装手册.
Presentation transcript:

SharedPreferences与文件存储

课程安排 SharedPreferences 不同应用共享数据 Android文件操作 SDCard文件存取

Android数据存储方式 Shared Preferences 存储到文件 SQLite数据库 内容提供者(Content provider) 存储到网络服务器

SharedPreferences 如何保存软件配置参数: Window: 采用ini文件进行 j2se应用: 采用properties属性文件 Android平台提供一个SharedPreferences类,它是一个轻量级的存储类,适合用于保存软件配置参数。 使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下

SharedPreferences接口 SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下常用方法来访问SharedPreferences的key_value键值对。 方法名称 描述 public abstract boolean contains (String key) 判断SharedPreferences是否包含特定key的数据 public abstract SharedPreferences.Editor edit () 返回一个Edit对象用于操作SharedPreferences public abstract Map<String, ?> getAll () 获取SharedPreferences数据里全部的key-value对 getXXX(String key,XXX defvlaue) 获取SharedPreferences数据指定key所对应的value,如果该key不存在,返回默认值defValue。其中XXX可以是boolean、float、int、long、String等基本类型的值

Editor接口 由于SharedPreference是一个接口,而且在这个接口里并没有提供写入数据和读取数据的能力。但是在其内部有一个Editor内部的接口,Edit这个接口有一系列的方法用于操作SharedPreference。 方法名称 描述 public abstract SharedPreferences.Editor clear () 清空SharedPreferences里所有的数据 public abstract boolean commit () 当Editor编辑完成后,调用该方法可以提交修改,而且必须要调用这个数据才修改 public abstract SharedPreferences.Editor putXXX (String key, boolean XXX) 向SharedPreferences存入指定的key对应的数据,其中XXX可以是boolean、float、int、long、String等基本类型的值 public abstract SharedPreferences.Editor remove (String key) 删除SharedPreferences里指定key对应的数据项

SharedPreferences存储数据 SharedPreferences sharedPreferences = getSharedPreferences("lxt008", Context.MODE_PRIVATE); Editor editor = sharedPreferences.edit();//获取编辑器 editor.putString("name", "lxt"); editor.putInt("age", 35); editor.commit();//提交修改 生成的lxt008.xml文件内容如下: <?xml version=“1.0” encoding=“utf-8” standalone=“yes” ?> <map> <string name="name">lxt</string> <int name="age" value=“30" /> </map>

SharedPreferences操作模式 getSharedPreferences(na, memode)方法 参数1:指定该文件名称,名称不用带后缀。 参数2:指定文件的操作模式,共有四种操作模式。 Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。 MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。 getPreferences(mode)方法操作SharedPreferences,这个方法默认使用当前类不带包名的类名作为文件的名称。

访问SharedPreferences数据 SharedPreferences sharedPreferences = getSharedPreferences("lxt008", Context.MODE_PRIVATE); //getString()第二个参数为缺省值,如果preference中不存在该key,将返回缺省值 String name = sharedPreferences.getString("name", ""); int age = sharedPreferences.getInt("age", 1);

课程安排 SharedPreferences 不同应用共享数据 Android文件操作 SDCard文件存取

访问其他应用SharedPreferences数据 其他应用要访问上面应用的preference,首先需要创建上面应用的Context,然后通过Context访问preference,访问preference时会在应用所在包下的shared_prefs目录找到preference : Context otherAppsContext = createPackageContext(“com.test",Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences(“test", Context.MODE_WORLD_READABLE); String name = sharedPreferences.getString("name", ""); int age = sharedPreferences.getInt("age", 0);

课程安排 SharedPreferences 不同应用共享数据 Android文件操作 SDCard文件存取

文件存储 文件可以存储比使用引用更大数量的数据 Android 提供方法来读、写文件 只有本地文件可以被访问 优点:可以存储大容量的数据 缺点:文件更新或是格式改变可能会导致巨大的编程工作

Java提供了一套完整的IO流体系,用来对文件进行操作。Android同样支持以这种方式来访问手机存储器上的文件,包括内部存储器和外部存储器 第二种方式,使用Context提供的方法来直接操作

Java IO读文件操作 Context.openFileInput(String name) 打开一个与应用程序联系的私有文件输入流 // 读取文件内容       private String readFiles() {           String content = null;           try {               FileInputStream fis = openFileInput(FILENAME);               ByteArrayOutputStream baos = new ByteArrayOutputStream();               byte[] buffer = new byte[1024];               int len = 0;               while ((len = fis.read(buffer)) != -1) {                   baos.write(buffer, 0, len);               }               content = baos.toString();               fis.close();               baos.close();           } catch (Exception e) {               e.printStackTrace();           }           return content;       }   Context.openFileInput(String name) 打开一个与应用程序联系的私有文件输入流 当文件不存在时抛出FileNotFoundException FileInputStream in = this.openFileInput("test.txt");//打开文件"test.txt" …… in.close();//关闭输入流

Java IO写文件操作 Context.openFileOutput(String name,int mode) 开启一个与应用程序联系的私有文件输出流 当文件不存在时该文件将被创建 文件输出流可以在添加模式中打开,这意味新的数据将被添加到文件的末尾 FileOutputStream out = this.openFileOutput("test2.txt",MODE_APPEND); //打开文件"test2.txt"进行写操作、使用MODE_APPEND 在添加模式中打开文件 …… out.close();//关闭输出流 // 保存文件内容       private void writeFiles(String content) {           try {               // 打开文件获取输出流,文件不存在则自动创建               FileOutputStream fos = openFileOutput(FILENAME,                     Context.MODE_PRIVATE);               fos.write(content.getBytes());               fos.close();           } catch (Exception e) {               e.printStackTrace();           }       }  

使用Context进行文件存储 Context提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。 public class FileActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { ... FileOutputStream outStream = this.openFileOutput(“test.txt", Context.MODE_PRIVATE); outStream.write(“zf".getBytes()); outStream.close(); } openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/com.test/files/test.txt ,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/<package name>/files目录就可以看到该文件。

使用Context进行文件存储 openFileOutput()方法的第二参数用于指定操作模式,有四种模式,分别为: Context.MODE_PRIVATE    = 0   为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND Context.MODE_APPEND    = 32768  模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。 Context.MODE_WORLD_READABLE = 1  表示当前文件可以被其他应用读取 Context.MODE_WORLD_WRITEABLE = 2  表示当前文件可以被其他应用写入

使用Context读取文件 如果要打开存放在/data/data/<package name>/files目录应用私有的文件,可以使用Context提供openFileInput()方法。 FileInputStream inStream = this.getContext().openFileInput(“lxt008.txt"); Log.i("FileTest", readInStream(inStream)); readInStream()的方法请看本页下面备注。 或者直接使用文件的绝对路径: File file = new File("/data/data/com.test/files/lxt008.txt"); FileInputStream inStream = new FileInputStream(file); 注意:上面文件路径中的“com.test”为应用所在包,应替换为你自己应用使用的包。 对于私有文件只能被创建该文件的应用访问,如果希望文件能被其他应用读和写,可以在创建文件时,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。 Activity还提供了getCacheDir()和getFilesDir()方法: getCacheDir()方法用于获取/data/data/<package name>/cache目录 getFilesDir()方法用于获取/data/data/<package name>/files目录 public static String readInStream(FileInputStream inStream){ try { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length = -1; while((length = inStream.read(buffer)) != -1 ){ outStream.write(buffer, 0, length); } outStream.close(); inStream.close(); return outStream.toString(); } catch (IOException e) { Log.i("FileTest", e.getMessage()); return null; 19

读取Resources和Assets中的文件 在Android中,除了对应用程序私有文件夹中的文件进行操作之外,还可以从资源文件和Assets中获得输入流读取数据。这些文件分别存放在应用程序的res/raw目录和assets目录下。这些文件将在编译的时候和其他文件一起打包进APK中。 注意,这两个文件夹下的文件只能进行读操作,不能进行写操作。 1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作 InputStream is = getResources().openRawResource(R.id.filename);   2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作 AssetManager am = null;   am = getAssets();   InputStream is = am.open("filename");   public static String readInStream(FileInputStream inStream){ try { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length = -1; while((length = inStream.read(buffer)) != -1 ){ outStream.write(buffer, 0, length); } outStream.close(); inStream.close(); return outStream.toString(); } catch (IOException e) { Log.i("FileTest", e.getMessage()); return null; 20

课程安排 SharedPreferences 不同应用共享数据 Android文件操作 SDCard文件存取

把文件存放在SDCard 在程序中访问SDCard,你需要申请访问SDCard的权限。 在AndroidManifest.xml中加入访问SDCard的权限如下: <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard写入数据权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

把文件存放在SDCard 要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。 注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录 File saveFile = new File(sdCardDir, “test.txt”); FileOutputStream outStream = new FileOutputStream(saveFile); outStream.write(“test".getBytes()); outStream.close(); }

课程总结 SharedPreferences 不同应用共享数据 Android文件操作 SDCard文件存取