Android数据存储之File

Android使用与其他平台类似的基于磁盘文件系统(disk-based file systems),上篇文章通过SharedPerference来进行数据存储,这次可以使用File。File 对象非常适合用来读写那种流式顺序的数据,可以用来读写图片文件或者是网络中交换的数据。

存储位置

所有的Android设备都有两个文件存储区域:"internal" 与 "external" 存储。 那两个名称来自与早先的Android系统中,那个时候大多数的设备都内置了不可变的内存(internal storage),然后再加上一个类似SD card(external storage)这样可以卸载的存储部件。后来有一些设备把"internal" 与 "external" 的部分都做成不可卸载的内置存储了,虽然如此,但是这一整块还是从逻辑上有被划分。

Internal storage:总是可用的;这里的文件默认是只能被自己的app所访问的;当用户卸载app的时候,系统会把internal里面的相关文件都清除干净;Internal是在你想确保不被用户与其他app所访问的最佳存储区域。

External storage:并不总是可用的,因为用户可以选择把这部分作为USB存储模式,这样就不可以访问了;是大家都可以访问的,因此保存到这里的文件是失去访问控制权限的;当用户卸载你的app时,系统仅仅会删除external根目录(getExternalFilesDir)下的相关文件;External是在你不需要严格的访问权限并且你希望这些文件能够被其他app所共享或者是允许用户通过电脑访问时的最佳存储区域。

Internal storage保存

保存到手机的internal的时候,需要两种方法去取出文件目录:

getFilesDir() : 返回一个File,代表app的internal目录。

getCacheDir() : 返回一个File,代表了app的internal缓存目录。需要确保这个目录下的文件在一旦不再需要的时候能够马上被删除,还要分配一个合理的大小,例如1MB 。如果系统的内部存储空间不够,会自行选择删除缓存文件。

下面这种方式直接通过openFileOutput,在对应的路径下创建一个文件:

	 String filename ="testfile";
		 String string = "FlyElephant!";
		 FileOutputStream outputStream;

		 try {
		 outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
		 outputStream.write(string.getBytes());
		 outputStream.close();
		 } catch (Exception e) {
		 e.printStackTrace();
		 }

  当然如果你想保存一些缓存文件的时候,就需要调用一下系统的getCacheDir()方法:

	 File file;
		 try {
		 String fileName="CacheTest";
		 file = File.createTempFile(fileName, ".txt",
		 MainActivity.this.getCacheDir());
		 }
		 catch (IOException e) {
		 // Error while creating file
		 }

External storage保存

刚才保存到Internal中的时候什么都没有配置,需要保存到外部的时候需要配置读写的权限,读的权限READ_EXTERNAL_STORAGE,写的权限:READ_EXTERNAL_STORAGE:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

  先来看一段保存到外部存储的代码:

		if (Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			File file = new File(Environment.getExternalStorageDirectory(),
					"66.txt");
			try {
				FileOutputStream fos = new FileOutputStream(file);
				ObjectOutputStream oos = new ObjectOutputStream(fos);
				oos.writeObject("FlyElephant");// 写入
				fos.close(); // 关闭输出流
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Log.i("com.example.googlefile", file.getAbsolutePath());

首先需要判断一下SD卡是不是可用,因为external storage可能是不可用的比如SD卡被拔出,那么你应该在访问之前去检查是否可用。你可以通过执行 getExternalStorageState()来查询external storage的状态。如果返回的状态是MEDIA_MOUNTED, 那么你可以读写。(开始没有判断的时候,一直没有找到报错的原因)

看到这个获取完之后跟上面保存在内部存储设备的过程一样,下面就不用多说什么了,最后一点就是路径是在/mnt/sdcard目录下,如果是弄成私有文件,不允许外部访问,目录应该是在

/mnt/sdcard/Android/data/包名 目录下。

文件存储比较简单,另外说下文件删除吧,保存到外部:

file.Delete()

Internal中的删除:

 MainActivity.this.deleteFile("testfile")
时间: 2024-12-31 01:31:35

Android数据存储之File的相关文章

【Android数据存储】- File

个人学习整理,如有不足之处,请不吝指教.转载请注明:@CSU-Max 读写本应用程序数据文件夹中的文件 此种方法读写的文件在/data/data/<应用程序包名>中 android 中提供了 openFileInput(String fileName) 和 openFileOutput(String fileName, int mode) 两个方法来读取本应用程序数据文件夹中的文件和向其写入. openFileInput(String fileName)    打开文件输入流 openFile

Android 数据存储之 File

优点:  1.适合游戏存储,能存储较大数据:        2.不仅能存储到系统中,也能存储到SD卡中!    @保存方式:Stream 数据流方式 * @注意1:默认情况下,使用openFileOutput 方法创建的文件只能被其调用的应用使用, *         其他应用无法读取这个文件,如果需要在不同的应用中共享数据: * * @注意2:因为android  os内部闪存有限,所以适合保存较少的数据,当然我们也有解决的方法, *         就是把数据保存在SD开中,这样就可以了! 

Android数据存储(2):Internal Storage

Android数据存储的第二种形式是Internal Storage,即内部存储. 内存存储的特点是存储的是私有数据,其存储位置是在手机内存,一种是普通的文件存储,另一种是文本或图片在内存的缓存. 内部缓存的存放位置/data/data/包名/files 或 /data/data/包名/cache 1.create and write a private file to the internal storage: 步骤: 1)调用 openFileOutput()方法,返回的是一个FileOut

Android数据存储技术五大方式总结

本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据     适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口令密码等

Android——数据存储(四种方式之二)读写SD卡

Android--数据存储(四种方式) 1.SharedPrefereces 只能保存一些简单的数轻量级.XML  存储文件名, 数据保存在data/data/basepackage/shared_prefs/myopt.xml中    实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default) 2.读写SD卡  SD的根目录  适用于数据流读写 实现步骤:加入读写SD卡权限

android数据存储_内部存储

源码下载(免下载积分):下载 你可以直接存储数据到内部存储中,默认情况下,文件存储到内部存储中是私有的,不能被 其他程序访问,当卸载应用程序,这些文件会被移除. 创建并写入数据可以有两种方法: 使用java中的相关的方法, 使用android.content中的相关方法,  调用 openFileOutput(),并返回FileOutputStream对象 调用FileOutputStream对象的write()方法 关闭流 读文件也是基本相同的方式. 在读文件有一点小技巧:如果想在编译时保存一

android 数据存储的几种方式

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理. 对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络.但从开发者的

android数据存储_外部存储

源码下载(免下载积分):下载 外部存储并不是一定可以访问的,例如外部存储挂载到电脑上是,或者是SD Card作为外部存储,被移除是,因此在访问外部存储时,一定要保证外部存储是可以获得的.判断外部存储是否已经挂载到了手机上可以这样判断: //判断外部存储是否可以访问,并且可以读写 private boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Enviro

10、Android数据存储

课程目标: 掌握Android中数据存储的几种方式 熟练使用PreferenceActivity&PreferenceScreen做专业的Setting功能 熟练使用SQLite3来存储数据 深入研究SQLite3数据库特性,并且比对与大型数据库的包括存储过程,主外键关联等特性 了解文件存储的内外存储分别  了解网络存储C/S结构原理 . 重点难点:SQLiteOpenHelper类的使用   SQLIte数据库的特性掌握 考核目标: 说出Android数据存储的几种形式 ? Sqlite3能支