复习转载自 http://blog.csdn.net/furongkang/article/details/6804897 感谢作者提供
- 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();
- }
- 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); //打印
- }
- }