Android文件存储
Android平台设备的存储器
内存即Memory,当系统运行和App运行时必须将程序的核心模块加载到内存中; 内部存储器即InternalStorage,它的空间十分有限,是Android系统本身和系统应用程序主要的数据存储所在位置,一旦内部存储空间耗尽,Android平台设备也就无法使用了,开发者应该尽量避免在编码时使用内部存储空间; 外部存储器即Externalstorage,它和SD卡没有必然的联系,通常包含公有目录和私有目录两类子文件夹。 Android系统的目录结构中有三个重要的文件夹: data文件夹:即内部存储器对应的文件夹 storage文件夹或mnt文件夹:即外部存储器对应的文件夹
Shared Preferences机制
当用户在使用App时需要保存一些偏好参数,例如是否记住账号密码、保存App的配置信息(是否打开音效、是否保存背景等)。这些参数保存时数据量一般较少,它们通常是boolean、float、int、long或string等基本类型的值。Android系统中对于这种类型的数据通常采用轻量级的存储类—SharedPreferences。 Shared Preferences提供了一种基于键值对形式的轻量级数据存储方式,通过SharedPreferences,运行于统一Context下的应用程序都可以共享其中的数据。 当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。
Shared Preferences是android.content.SharedPreferences包中的一个接口,主要负责读取应用程序的Preferences数据,它的常用方法:
数据存储
使用SharedPreferences存储数据可以通过以下4个步骤实现。 第1步:获取SharedPreferences对象 通过Context类中的getSharedPreferences(String name,int mode)获取SharedPreferences对象。 第一个参数name为保存在系统中的文件名 第二个参数mode表示文件的操作模式:
第2步:通过SharedPreferences对象的edit()方法获得SharedPreferences.Editor对象; 第3步:通过Editor对象的putXXX()方法,将不同类型的数据以key-value键值对的形式存储; 第4步:完成以上步骤后,此时的数据仍然在内存中,需要通过Editor对象的commit()方法提交数据,也就是将数据保存到xml文件中。
public void save(String username, String password){"
SharedPreferences sp=this. getSharedPreferences("mycontig", Context. VMODE _PRTVATE);
SharedPreferences. Editor editor=sp. edit();
editor. putString("username", use rname);
editor. putString("pas sword", pas sword);"
editor. commit();
数据读取
第1步:获取SharedPreferences对象实例,与存储数据一样; 第2步:因为SharedPreferences文件中存储的数据通常不止一个,在读取数据也可以根据实现情况,采用以下两种方式: 第一种方式:读取单一数据,调用 SharedPreferences的getXXX0方法,分别读取String、int、long等类型数据。下面自定义方法read()用于实现将前面“myconfigxml”文件中保存的username和password读出并分别保存在uname和upwd中。
public void read(){
SharedPreferencea ap-getSharedPreferences("myconfig",Context.MOEPRITVAE)"
String uname=ap.getString("username","admin");
String upwd=ap.getString("paasword","admin");
}
第二种方式:读取全部数据,调用SharedPreferences的getA1l( )方法,再遍历map File类文件存储访问机制 Android支持以流的方式来访问Android平台设备存储器上的文件,包括设备本身的存储设备(内部存储器,InternalStorage)或外接的存储设备(外部存储器,ExternalStorage)。另外Android中的Context类对象提供了openFileOutput()、openFilelnput()
读写内部存储器的文件数据
Android系统的Context类提供了如下两个方法来打开本应用程序的数据文件1/0流: FilelnputStream openFilelnput(String name):打开应用程序的数据文件下的name文件对应的输入流; FileOutputStream openFileOutput(String name,int mode):打开应用程序的数据文件下的name文件对应的输出流。 定义writeFiles()方法,用于实现写入文件
public void writeFiles(String content,String fileName){
FileOutputStream fos=null;
try{
fos=openFileOutput(fileName,MODE APPEND);
byte[] bytes=content.getBytes();
fos.write(bytea);
fos.close();
}catch(TOException e){
e.print StackTrace();
}
}
定义readFiles()方法,用于实现读出文件
public String readFiles(String fileName){ String content=null;
在onCreate()方法中实现初始化对象、“保存文件”及“读出文件”按钮的监听事件 应用程序在虚拟机或真机运行后,程序就会在“/data/data/应用程序的包名”下创建一个files文件夹,输入的xxx.txt”文件就保存这个文件夹下。
读写取外部存储器数据
当程序通过Context类的openFilelnput()、OpenFileOutput()来打开文件输入流、输出流时,程序所打开的都是应用程序的数据文件夹里的文件。 因为Android设备的内部存储空间有限,所以能够存储的文件大小也就很有限,而诸如SD卡的外部存储设备可大大地扩充Android设备的存储能力。Android应用开发中常使用Environment类获取外部存储器目录。 在访问外部存储器之前一定要先判断外部存储器是否已经是可使用状态(即已挂载或可使用),并且需要在AndroidManifest.xml配置文件中添加外部存储读和写的权限。
读写SD卡上文件通常使用用下面3个步骤。 第1步 在AndroidMainfest.xml文件中添加读写SD的权限,代码如下: <–在SD卡中创建与删除文件的权限–>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<–向SD卡中写入数据的权限–>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第2步: 判断Android设备上是否插入SD卡,并且应用程序具有读写SD卡的权限,代码如下:
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUN TED);
第3步:调用getExternalStorageDirectory()来获得SD卡的根目录
File SDCardRoot=Environment.getExternalStorageDirectory();
读资源文件数据
Android系统的资源文件可以分为两种: 第一种是res/raw目录下的资源文件,这类资源文件会在R.java里面自动生成该资源文件的ID。 第二种是assets目录下存放的原生资源文件,它不会被映射到R.java文件中,所以不能通过R.XXX.ID的方式访问。
读写取外部存储器数据
assets目录下的资源文件 使用Android Studio创建项目时,开发环境不会自动创建assets目录,如果开发者需要使用这个文件夹存储原生资源文件,就需要在项目的res/main文件下手动创建assets文件夹,创建完成后将需要使用的原生资源文件复制到该文件夹中即可。
res目录下的资源文件 要在res目录下放置数据文件,通常需要手动在该目录下创建raw目录,然后把数据文件复制到该目录下。下面代码表示读出raw目录下的test文件。 欢迎大家加我微信交流讨论(请备注csdn上添加)
|