Android开发5——文件读写
一、基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,androd1.5,android1.6保存在sdcard目录 保存的位置通过android的file explorer视图可以找到 二、例子 packagecn.xy.service; importjava.io.ByteArrayOutputStream; importjava.io.File; importjava.io.FileInputStream; importjava.io.FileOutputStream; importandroid.content.Context; importandroid.os.Environment; /** *文件操作类 * *@authorXY * */ publicclassFileService { /** *上下文对象 */ privateContextcontext; publicFileService(Contextcontext) { super(); this.context=context; } /** *保存文件(保存至手机自带的存储空间) * *@paramfilename文件名 *@paramfileContent文件内容 */ @SuppressWarnings("static-access") publicvoidsave(Stringfilename,StringfileContent)throwsException { //私有操作模式:1.该文件只能被本应用访问。2.写入文件的内容会覆盖原有文件的内容 FileOutputStreamfos=context.openFileOutput(filename,context.MODE_PRIVATE);//默认保存在手机自带的存储空间 fos.write(fileContent.getBytes("UTF-8")); fos.close(); } /** *保存文件之SD卡 * *@paramfilename文件名 *@paramfileContent文件内容 */ publicvoidsaveInSDCard(Stringfilename,StringfileContent)throwsException { //若文件被保存在SDCard中,该文件不受读写控制 Filefile=newFile(Environment.getExternalStorageDirectory(),filename); FileOutputStreamfos=newFileOutputStream(file); fos.write(fileContent.getBytes("UTF-8")); fos.close(); } /** *读取文件内容 *在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长,可使用 *toByteArray()和toString()获取数据关闭ByteArrayOutputStream *无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException * *@paramfilename文件名 *@return */ publicStringread(Stringfilename)throwsException { FileInputStreamfis=context.openFileInput(filename);//默认到手机自带的存储空间去找 ByteArrayOutputStreamoutStream=newByteArrayOutputStream(); byte[]buffer=newbyte[1024]; intlen=0; //将内容读到buffer中,读到末尾为-1 while((len=fis.read(buffer))!=-1) { //本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用 outStream.write(buffer,0,len); } //取内存中保存的数据 byte[]data=outStream.toByteArray(); fis.close(); Stringresult=newString(data,"UTF-8"); returnresult; } } MainActivity try { //存储在手机自带存储空间 fs.save(filename,fileContent); Toast.makeText(getApplicationContext(),R.string.success,Toast.LENGTH_SHORT).show(); //存储在外部设备SD卡 //判断SDCARD是否存在和是否可读写 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { fs.saveInSDCard(filename,fileContent); Toast.makeText(getApplicationContext(),R.string.success,Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(),R.string.failsdcard,Toast.LENGTH_SHORT).show(); } } catch(Exceptione) { Toast.makeText(getApplicationContext(),R.string.fail,Toast.LENGTH_SHORT).show(); Log.e(tag,e.getMessage()); } 文件名不带路径,直接输入如xy.txt 对于SD卡的操作,需要在AndroidManifest.xml加入权限 <!--在SDCard中创建和删除文件的权限--> <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!--往SDCard中写入数据的权限--> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 三、一些API ①Environment.getExternalStorageDirectory()获取的路径为mnt/sdcard目录,对于android1.5,1.6的路径是sdcard目录 ②Activity中提供了两个API getCacheDir()获取的路径为data/data/应用包名/cache目录 getFilesDir()获取的路径为data/data/应用包名/files目录 本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1076826如需转载请自行联系原作者 woshixuye111