首先说下 File存储在Android 中有什么用途呢?
File存储:可以让我们轻松访问手机存储器上的文件(手机内存卡或者用户的SD卡)
android中我们可以在我们的手机自带的内存卡中或者用户插入的SD卡中进行文件的写入和读出,总之就是要建立一条输入输出通道。
/*** 该方法是将数据保存在我们手机内置的存储空间,主要是调用Context.openFileOutput(fileName,MODE)方法就可以得到相应的输出流* fileName:不能使用我们常用的分隔符("/"),例如:aaa/test.txt,我们只能使用test.txt* 所保存的文件放在/data/data/包名/files/目录下,例如:/data/data/com.xin.activity/files/test.txt* MODE:有以下几种:* context.MODE_PRIVATE:当前应用程序下的私有数据,其他应用程序不能够进行读或者写访问,否则会出现permission denni错误,* 并且如果文件已经存在,重新写入的文件会覆盖掉以前文件当中的数据;* context.MODE_APPEND:当前应用程序下的私有数据,其他应用程序不能够进行读或者写访问,否则会出现permission denni错误,* 并且如果文件已经存在,重新写入的数据会追加到源文件的数据后面;* context.MODE_WORLD_READABLE:其他应用程序可以对该文件进行读的操作,不能进行写的操作,否则会出现permission denni错误;* context.MODE_WORLD_WRITEABLE:其他应用程序可以对该文件进行写的操作,不能进行读的操作,否则会出现permission denni错误;* 如果要使其他应用程序既可以对文件进行读取,又可以对文件进行写入,可以使用* context.MODE_WORLD_READABLE+context.MODE_WORLD_WRITEABLE方式传入参数* 保存后的文件中存在中文是不会乱码的* 我们可以通过window-->android-->file explorer查看系统中的文件* @param fileName* @param fileContent* @throws Exception*/public void save ( String fileName , String fileContent ) throws Exception {FileOutputStream fos = context . openFileOutput ( fileName , context . MODE_WORLD_WRITEABLE );fos . write ( fileContent . getBytes ());}从手机内置的存储空间里读取数据/*** 从手机内置的存储空间中读取数据,主要是调用context.openFileInput(fileName)方法,传入参数文件名称* @return*/public String read ( String fileName ) throws Exception {FileInputStream fis = context . openFileInput ( fileName );byte [] buffer = new byte [ 1024 ];int len = 0 ;//保存在内存中,也可以使用下面的方式进行输出ByteArrayOutputStream baos = new ByteArrayOutputStream ();//StringBuilder sb=new StringBuilder();while (( len = fis . read ( buffer ))!=- 1 ){baos . write ( buffer , 0 , len );//sb.append(new String(buffer,0,len));}byte [] b = baos . toByteArray ();return new String ( b );//return sb.toString();}
保存文件到手机的外部存储设备SD卡中/*** 保存文件到手机的外部存储设备SD卡中* 访问硬件设备,我们需要在AndroidMainifest.xml中配置相应的访问SD卡的权限* <!-- 在SD卡中创建与删除文件权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!-- 向SD卡中写入数据权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>注意由于android系统的版本不同,所以外部存储设备的根目录可能会不一样,例如2.1版/sdcard/,而2.2版本的/mnt/sdcard/所以我们不能将其写死,使用Environment.getExternalStorageDirectory()即可得到不同版本的根目录,所以用这种方式如果文件已经存在,内容会覆盖* @param fileName* @param fileContent* @throws Exception*/public void saveToSDCard ( String fileName , String fileContent ) throws Exception {//Environment.getExternalStorageDirectory()--->/sdcardFile file = new File ( Environment . getExternalStorageDirectory (), fileName );FileOutputStream fos = new FileOutputStream ( file );fos . write ( fileContent . getBytes ());}
将SD卡文件中的内容读取出来/*** 将SD卡文件中的内容读取出来* @param fileName* @return* @throws Exception*/public String readSDCard ( String fileName ) throws Exception {File file = new File ( Environment . getExternalStorageDirectory ()+ File . separator + fileName );FileInputStream fis = new FileInputStream ( file );byte [] buffer = new byte [ 1024 ];int len = 0 ;ByteArrayOutputStream baos = new ByteArrayOutputStream ();while (( len = fis . read ( buffer ))!=- 1 ){baos . write ( buffer , 0 , len );}byte [] b = baos . toByteArray ();return new String ( b );}
其实只要我们学过Java 的相信上面的代码很 easy 就能理解从内存卡中读写主要是用到android中提供的当前上下文Context提供的两个类openFileInput和openFileOutput获得相应的字节输入流和字节输出流而操作SD卡上面的文件则主要是获得SD卡中文件所在的路径,可以通过Environment.getExternalStorageDirectory()来获得其根目录,然后对里面的文件进行相应的IO流操作即可。