android之数据存储(一)

来源:互联网 发布:中国社交软件大全 编辑:程序博客网 时间:2024/06/05 03:05
android之数据存储(一)

内部存储的概念:定义:data文件夹就是我们常说的内部存储
内部存储(InternalStorage)
内部存储的实现:
1.data/data/包名/shared_prefs-sharedPreferenced
2.data/data/包名/database--------SQLite
3.data/data/包名/files-------普通数据存储在files中
4.data/data/包名/cache-----缓存文件存储在cache文件夹中
存储

外部存储的概念:
定义:
外部存储一般就是我们手机中看到的storage文件夹, 当
然也有可能是mnt文件夹,这个不同厂家有可能不一样。


外部存储(ExternalStorage) 外部存储的存储目录:
存储根目录在大部分手机上是
/storage/emulated/0 ,但是在部分手机上
为/mnt/sdcard(比如三星手机)

外部存储的实现:
public files
private files

一般来说,在storage文件夹中有一个sdcard文件夹,这个文件夹中的文件又分为两类,一类是公有目录,还有一类是私有目录,其中的公有目录有九大类,比如DCIM、DOWNLOAD等这种系统为我们创建的文件夹,私有目录就是Android这个文件夹,这个文件夹打开之后里边有一个data文件夹,打开这个data文件夹,里边有许多包名组成的文件夹。


手机和电脑对比:
内部存储:内部存储空间其实叫RAM是手机运行内存,这个越大越好,非常重要【相当于电脑的内存】
外部存储:
内置存储卡就是手机自带内存,又叫ROM【相当于电脑的本身的硬盘】
外置存储卡是SD卡用来储存文件、资料【相当于电脑上使用的U盘或其他外置存储设备】
1.SharedPreferences
I.定义SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,用户信息等。一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。
II.存储位置: 在/data/data/<包名>/shared_prefs目录下
III.优缺点
优点
SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。
缺点
只能存储boolean,int,float,long和String五种简单的数据类型,无法进行条件查询等。

IV4.使用
1.使用共享参数的两个方法
①getSharedPreferences:调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
SharedPreferences sp = context.getSharedPreferences("共享参数文件名", Context.MODE_PRIVATE);
②getPreferences:调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用,比如:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

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

2.向共享参数文件中写入内容
步骤:1.获得SharedPrefreces对象
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
2.获得Editor对象(对SharedPreferences进行编辑只能通过Editor对象)
Editor editor = sharedPref.edit();
3.写入内容
editor.putInt("key", 90);
4.调用Editor对象的commit()方法提交
editor.commit();
注意:SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。

3.读取共享参数文件内容
默认值:当共享参数文件中,key没有值,则需返回一个默认值,默认值由程序员自己定义。
使用SharedPreferences中getXXX(key,默认值)方法
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
long highScore = sharedPref.getInt("key", 默认值);





2.文件存储

总结:
1.内部存储
《1》getFileDir() 存放在这个目录下面 string.txt
data/data/包名/files
《2》getCacheDir() 存放在这个目录下面的 string.txt
data/data/包名/cache
2.外部存储 要权限,并且需要判断sd卡是否挂载
《1》把bitmap的图片存放在getExternalStoragePublicDirectory()这个目录下面的
在手机里面的9大默认的目录里面 手机存储/Pictures文件下面
在模拟器里面的话,有的模拟器是放在mnt/shell/emulated/0/Pictures文件夹下面

《2》getExternalFilesDir(Environment.DIRECTORY_PICTURES);
这个会默认存放在Android目录下面
在手机里面的 手机存储/Android文件下面
在模拟器的话,会放在mnt/shell/emulated/0/Android/data/包名/files/Prictures文件夹下面

--------------------------------------------------------------------------------------------------------
文件存储——内部存储
定义:built-in non-volatile memory非易失性存储,手机等设备自带的一种存储介质
特点:1.一直有效
2.应用默认访问的文件位置
3.当用户卸载你的应用时,内部存储中的文件也会同时移除

使用
写入:
1.getFilesDir():将文件保存在data/data/包名/files文件夹下
File file = new File(getFilesDir(), "文件名");
String fileName = "mysetting.txt";
String text = "帐号:admin; 密码:123";
//保存txt文本到内部存储中 存放在data/data/包名/files文件夹下
private void saveTextToInternalStorage(String fileName, String text) {
File file = new File(getFilesDir(), fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(text.getBytes());
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
另外:还可以通过openFileOutput("文件名",Context.MODE_PRIVATE)方法保存文件该位置
private void saveTextToInternalStorage2(String fileName, String text) {
try {
FileOutputStream fos = openFileOutput(fileName,
Context.MODE_PRIVATE);
fos.write(text.getBytes());
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

读取:
openFileInput("文件名")
//从内部存储中读取txt文本的内容
private String ReadTextFromInternalStorage(String fileName, String text2) {
String result = "";
try {
FileInputStream fis = openFileInput(fileName);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String str;
while ((str = br.readLine()) != null) {
result = result + str;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}


2.getCacheDir():该文件保存在/data/data/包名/cache文件夹下,除了用户卸载该文件会删除外,当系统空间不足时会被系统自动回收掉
//保存文本到内部存储 保存在/data/data/包名/cache文件夹下
private void saveTextToInternalStorage3(String fileName, String text) {
File file = new File(getCacheDir(), fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(text.getBytes());
fos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


文件存储——外部存储
定义:用于存储较大的文件,比如音频,视频等
特点:1.可以被移除,在向其中拷贝内容时需要进行是否挂载的判断
2.由于是可读的属性,所以除了本应用以外还可以被其他的应用访问
3.当用户卸载你的应用后,将会保留public Files,private Files将被移除

关于Android的数据外部存储,在API Level 8之前,所有的文件都是建议放在Environment.getExternalStorageState()目录下的;从API Level 8开始,对于应用程序的私有文件应该放在Context.getExternalFilesDir目录下,非私有的(shared)的文件应该放在目录下Environment.getExternalStoragePublicDirectory(String)所指定的目录下。



<!-- 在SD卡中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 向SD卡写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

分类
1.Public files
①特点:共有文件可以自由地被用户或其他应用访问,当用户卸载应用后,这些文件还会保留,比如拍的照片或下载的文件
②使用
getExternalStoragePublicDirectory():将文件保存在共有文件夹内,系统本身自带了一些共有文件夹,比如Pictures、Music和Downloads等,他们都封装在Environment类中,比如:
目录列表:
Music/---媒体扫描器把在这个目录中找到所有媒体文件作为用户音乐。
Podcasts/---媒体扫描器把在这个目录中找到的所有媒体文件作为音/视频的剪辑片段。
Ringtones/---媒体扫描器把在这个目录中找到的所有媒体文件作为铃声。
Alarms/---媒体扫描器把在这个目录中找到的所有媒体文件作为闹钟的声音。
Pictures/---所有的图片(不包括那些用照相机拍摄的照片)。
Movies/---所有的电影(不包括那些用摄像机拍摄的视频)。
Download/---其他下载的内容。
notification/--通知消息
DCIM/-- 照相机拍的图片或者视频
2.Private files
①特点:当用户卸载应用后,该文件会被同时删除掉。该文件位于SD卡中Android文件夹下
②使用:getExternalFilesDir():将文件保存到Android文件夹下,文件目录为/data/包名/files/xxx,比如:
0 0