Android Day02-文件操作-登陆示例
需求:登陆 第1步:搭建UI 采用混合布局,布局搭建好之后如下所示: 第2步:准备工作 根据javaWeb中的mvc+dao的开发模式,创建好包名和类。 第3步:业务逻辑 就是一个存值和取值的过程,也可以说是读写文件的过程。 注意在获取路径的时候,不要使用硬性编码(hardcode)。 关键知识点梳理: ▇获取应用程序的files私有目录:"/data/data/应用程序包名/files" 方式1:得路径,再得到流。 Filecontext.getFilesDir() <-- 补充一下 Filecontext.getCacheDir()表示得到缓存目录/caches--> 方式2:直接得到流 文件读取流:InputStream in = context.openFileInput("文件名(带后缀)"); 文件写入流:OutputStream out = context.openFileOutput("user.txt", Context.MODE_PRIVATE);//有2个参数,第2个参数 表示文件的权限。 ▇获取设备的SD卡目录: →1.注意要配置sd的访问权限。 →2.判断sd卡的状态。 1 2 3 4 5 6 7 StringstorageState=Environment.getExternalStorageState(); if (!storageState.equals(Environment.MEDIA_MOUNTED)) { //如果挂起,提示用户sd卡不存在。 Toast.makeText(mainContext, "sd卡不存在" ,Toast.LENGTH_SHORT).show(); return ; } →3.判断sd卡空间容量信息。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //假如SD卡小于200M就提示内存不足 //首先获取外部存储的目录File对象 Filefile_storage=Environment.getExternalStorageDirectory(); //通过File对象来获得外部存储的可用空间 Longuseable_storage=file_storage.getUsableSpace(); //将字节转换成易于阅读的M表示方法 Stringuseable_storage_mstr=Formatter.formatFileSize(mainContext,useable_storage); //得到外部存储的总空间 Longtotal_storage=file_storage.getTotalSpace(); Stringtotal_storage_mstr=Formatter.formatFileSize(mainContext,total_storage); if (useable_storage< 1024 * 1024 * 200 ) { Toast.makeText(mainContext, "外部存储空间不足,剩余可用空间为:" +useable_storage_mstr+ "M" + ",总空间为:" +total_storage_mstr+ "M" ,Toast.LENGTH_LONG).show(); return ; } 通过linux命令df /sdcard来获得外部设备外部存储的信息: ▇获取资产文件夹Asset目录下的文件输入流: 1 2 3 4 5 6 //获取上下文的所有资源对象 Resourcesres=context.getResources(); //从资源对象中获取资产目录Asset的管理器AssetManager AssetManagermanager=res.getAssets(); //利用管理器的open方法获取它的目录下指定文件的读取流 InputStreamin=manager.open( "user.txt" ); ▇Preferences:"/data/data/应用程序包名/shared_prefs" 用于存放一些简单的标记信息、设置信息。通过xml文件在实现保存和取出。 Preferences存储文件流程 1 2 3 4 5 6 7 8 9 //第1步:通过上下文对象得到SharedPreferences对象 SharedPreferencesuser_pref=context.getSharedPreferences( "user.txt" ,Context.MODE_PRIVATE); //第2步:得到SharedPreferences的Editor对象 Editoruser_editor=user_pref.edit(); //第3步:通过Editor向SharedPreferences对象里面设置值,类似map中的键和值。 user_editor.putString( "username" ,user.getUsername()); user_editor.putString( "password" ,user.getPassword()); //第4步:提交Editor return user_editor.commit(); Preferences读取文件内容 1 2 3 4 5 6 //第1步:通过上下文对象得到SharedPreferences对象 SharedPreferencesuser_share=context.getSharedPreferences( "user.txt" ,Context.MODE_PRIVATE); //第2步:得到share对象的数据 Stringusername=user_share.getString( "username" , "用户名找不到" ); Stringpassword=user_share.getString( "password" , "密码找不到" ); //上面getString方法的第二个参数为找不到指定键名的时候返回的缺省值。 通过总结可以发现,上面的这些文件读取流,都只能读取当前应用程序的私有目录下的文件流,有局限性。如果要想跨应用读取数据,还是得结合一般IO流。 今天还讲了XML的解析和序列化,和javaWeb中的xml的解析及序列化十分的相似,只是获取解析器和序列器的方式稍有不同,是通过Xml这个类直接获取的。 Android 开发时如何正确获取使用扩展存储路径 http://http://my.oschina.net/liucundong/blog/314520 作为一个程序员,想必你也很讨厌App在SD卡根目录乱建目录吧,那就从我做起,来遵守Google的这一规定吧。 通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/{package_name}/files/ ,储存一些长时间保存的数据; 通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/{package_name}/cache/,储存临时缓存数据; 这两个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项。 本文转自屠夫章哥 51CTO博客,原文链接:http://blog.51cto.com/4259297/1674699,如需转载请自行联系原作者