Android读写文件

用文件进行数据存储
1.存储到android自带的存储空间中
Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
public class FileService { private Context context; public FileService(Context context) { this.context = context; } /** * 保存文件 * @param filename 文件名称 * @param content 文件内容 * @throws IOException */ public void save(String filename, String content) throws Exception { //利用javaIO实现文件的保存 FileOutputStream outStream =context.openFileOutput(filename, Context.MODE_PRIVATE); outStream.write(content.getBytes());//向文件中写入数据,将字符串转换为字节 outStream.close(); } }

通过Context.openFileOutput(String name,int mode)可以获取一个文件输入流

name为文件名,mode为文件模式,有4种模式

输出流指向路径为:/data/data/包名/files/

文件模式在Context中有定义常量

MODE_PRIVATE 私有的且覆盖

MODE_APPEND 私有的且追加

MODE_WORLD_READABLE 其他程序可读但不可写

MODE_WORLD_WRITEABLE 其他程序可写但不可读

组合模式使用(其他程序可写也可读),例如:MODE_WORLD_READABLE + MODE_WORLD_WRITEABLE


2.写入文件到SD卡

使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的。对于像视频这样的大文件,我们可以把它存放在SDCard。 SDCard是干什么的?你可以把它看作是移动硬盘或U盘。

(1).首先要在清单文件中(AndroidManifest.xml)中加入访问SDCard的权限如下:

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

(2).判断用户是否插入SDCard卡
//判断SDCard是否存在 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ service.saveToSDCard(filename,content); //实现保存 Toast.makeText(getApplicationContext(), R.string.sdsuccess, 1).show(); }else{ Toast.makeText(getApplicationContext(), R.string.sdderror, 1).show(); } (3).业务层保存操作
public void saveToSDCard(String filename,String content)throws Exception{ //Environment.getExternalStorageDirectory()表示找到sdcarf目录 File file =new File(Environment.getExternalStorageDirectory(),filename); FileOutputStream outStream =new FileOutputStream(file); outStream.write(content.getBytes()); outStream.close(); }

注:2.1版本以下的SDCard位置和2.2之后版本不同

可以通过Environment.getExternalStorageDirectory()获取当前SDCard位置,兼容所有版本

获取SDCard状态

通过Environment.getExternalStorageState()方法获取SDCard当前装填

常量 Environment.MEDIA_MOUNTED 为已安装

读取文件内容

如果要打开存放在/data/data/<packagename>/files目录应用私有的文件,可以使用Activity提供openFileInput()方法。

如:

/** * 读取文件内容 * @param filename 文件名称 * @return 文件内容 * @throws Exception */ public String read(String filename) throws Exception{ //得到输入流之后 FileInputStream inStream =context.openFileInput(filename); //创建一个往内存输出流对象 ByteArrayOutputStream outStream =new ByteArrayOutputStream(); byte[] buffer =new byte[1024]; int len =0; while((len=inStream.read(buffer))!=-1){ //把每次读到的数据写到内存中 outStream.write(buffer,0,len); } //得到存放在内存中的所有的数据 byte [] data =outStream.toByteArray(); return new String(data); }
测试:

package cn.itcast.test; import android.test.AndroidTestCase; import android.util.Log; import cn.itcast.service.FileService; public class FileServicTest extends AndroidTestCase { private static final String TAG="FileServicTest"; public void testRead() throws Throwable{ FileService service =new FileService(this.getContext()); String result=service.read("itcast.txt"); Log.i(TAG,result); //打印 } }

SharedPreferences(参数)存储

很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件或者xml进行保存。如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:

在程序中保存一些配置参数的时候我们经常使用SharedPreferences

Context.getSharedPreferences(String name,int mode)

该方法可以在/data/data/<package>/shared_pref/目录下创建一个以name命名的xml文件,mode文件为模式

存储偏好

调用edit()方法可以获取一个Editor对象,对数据进行存储,存储之后需要调用commit()保存到文件

读取偏好

获得SharedPreferences之后调用getString()、getInt()等方法获取其中设置的值

在Activity中获取SharedPreferences

在Activity中可以调用getPreferences(int mode)方法获得一个SharedPreferences,文件名和Activity名一致

/** * 使用SharedPreferences进行数据存储 * @param name name属性 * @param age age属性 */ public void save(String name, String age) { // 获取SharedPreferences对象, 路径在 /data/data/cn.itcast.preferences/shared_pref/preferences.xml, 文件模式为MODE_PRIVATE SharedPreferences preferences = context.getSharedPreferences("preferences", Context.MODE_PRIVATE); // 获取编辑器 Editor editor = preferences.edit(); // 通过editor进行设置 editor.putString("name", name); editor.putString("age", age); // 提交修改, 将数据写出到文件 editor.commit(); } /** * 访问SharedPreferences中的数据 * @return 偏好设置名值组成的Map */ public Map<String, String> load() { SharedPreferences preferences = context.getSharedPreferences("preferences", Context.MODE_PRIVATE); String name = preferences.getString("name", ""); String age = preferences.getString("age", ""); Map<String, String> map = new HashMap<String, String>(); map.put("name", name); map.put("age", age); return map; }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值