android学习 -- 读写文件操作

复习转载自 http://blog.csdn.net/furongkang/article/details/6804897 感谢作者提供

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

通过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的权限如下:

[html]  view plain copy
  1. <!-- 在SDCard中创建与删除文件权限 -->  
  2.   
  3. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  4.   
  5. <!-- 往SDCard写入数据权限 -->  
  6.   
  7. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

 

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

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

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

获取SDCard状态

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

常量 Environment.MEDIA_MOUNTED 为已安装

读取文件内容

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

如:

[html]  view plain copy
  1. /**  
  2.  * 读取文件内容  
  3.  * @param filename  文件名称  
  4.  * @return  文件内容  
  5.  * @throws Exception  
  6.  */  
  7. public String read(String filename) throws Exception{  
  8.     //得到输入流之后  
  9.     FileInputStream inStream =context.openFileInput(filename);  
  10.     //创建一个往内存输出流对象  
  11.     ByteArrayOutputStream outStream =new ByteArrayOutputStream();  
  12.     byte[] buffer =new byte[1024];  
  13.     int len =0;  
  14.     while((len=inStream.read(buffer))!=-1){  
  15.         //把每次读到的数据写到内存中  
  16.         outStream.write(buffer,0,len);  
  17.     }  
  18.     //得到存放在内存中的所有的数据   
  19.     byte [] data =outStream.toByteArray();  
  20.     return new String(data);  
  21. }  
测试:

[html]  view plain copy
  1. package cn.itcast.test;  
  2.   
  3. import android.test.AndroidTestCase;  
  4. import android.util.Log;  
  5. import cn.itcast.service.FileService;  
  6.   
  7. public class FileServicTest extends AndroidTestCase {  
  8.     private static final String TAG="FileServicTest";  
  9.     public void testRead() throws Throwable{  
  10.         FileService service =new FileService(this.getContext());  
  11.         String result=service.read("itcast.txt");  
  12.         Log.i(TAG,result);  //打印  
  13.     }  
  14. }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值