一、基本概念

在Android应用中保存文件,保存的位置有两处

①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录

②外存储设备如SD卡,较大,适合保存大文件如视频,Android中保存位置在mnt/sdcard目录,androd1.5,android1.6保存在sdcard目录

保存的位置通过android的file explorer视图可以找到


二、例子


  
  1. package cn.xy.service;

  2. import java.io.ByteArrayOutputStream;

  3. import java.io.File;

  4. import java.io.FileInputStream;

  5. import java.io.FileOutputStream;

  6. import android.content.Context;

  7. import android.os.Environment;

  8. /**

  9. * 文件操作类

  10. *

  11. * @author XY

  12. *

  13. */

  14. publicclass FileService

  15. {

  16. /**

  17. * 上下文对象

  18. */

  19. private Context context;

  20. public FileService(Context context)

  21. {

  22. super();

  23. this.context = context;

  24. }

  25. /**

  26. * 保存文件(保存至手机自带的存储空间)

  27. *

  28. * @param filename 文件名

  29. * @param fileContent 文件内容

  30. */

  31. @SuppressWarnings("static-access")

  32. publicvoid save(String filename, String fileContent) throws Exception

  33. {

  34. // 私有操作模式:1.该文件只能被本应用访问。2.写入文件的内容会覆盖原有文件的内容

  35. FileOutputStream fos = context.openFileOutput(filename, context.MODE_PRIVATE); // 默认保存在手机自带的存储空间

  36. fos.write(fileContent.getBytes("UTF-8"));

  37. fos.close();

  38. }

  39. /**

  40. * 保存文件之SD卡

  41. *

  42. * @param filename 文件名

  43. * @param fileContent 文件内容

  44. */

  45. publicvoid saveInSDCard(String filename, String fileContent) throws Exception

  46. {

  47. // 若文件被保存在SDCard中,该文件不受读写控制

  48. File file = new File(Environment.getExternalStorageDirectory(), filename);

  49. FileOutputStream fos = new FileOutputStream(file);

  50. fos.write(fileContent.getBytes("UTF-8"));

  51. fos.close();

  52. }

  53. /**

  54. * 读取文件内容

  55. * 在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长,可使用

  56. * toByteArray()和 toString()获取数据 关闭 ByteArrayOutputStream

  57. * 无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException

  58. *

  59. * @param filename 文件名

  60. * @return

  61. */

  62. public String read(String filename) throws Exception

  63. {

  64. FileInputStream fis = context.openFileInput(filename); // 默认到手机自带的存储空间去找

  65. ByteArrayOutputStream outStream = new ByteArrayOutputStream();

  66. byte[] buffer = newbyte[1024];

  67. int len = 0;

  68. // 将内容读到buffer中,读到末尾为-1

  69. while ((len = fis.read(buffer)) != -1)

  70. {

  71. // 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用

  72. outStream.write(buffer, 0, len);

  73. }

  74. // 取内存中保存的数据

  75. byte[] data = outStream.toByteArray();

  76. fis.close();

  77. String result = new String(data, "UTF-8");

  78. return result;

  79. }

  80. }

MainActivity

  
  1. try

  2. {

  3. // 存储在手机自带存储空间

  4. fs.save(filename, fileContent);

  5. Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();

  6. // 存储在外部设备SD卡

  7. // 判断SDCARD是否存在和是否可读写

  8. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))

  9. {

  10. fs.saveInSDCard(filename, fileContent);

  11. Toast.makeText(getApplicationContext(), R.string.success, Toast.LENGTH_SHORT).show();

  12. }

  13. else

  14. {

  15. Toast.makeText(getApplicationContext(), R.string.failsdcard, Toast.LENGTH_SHORT).show();

  16. }

  17. }

  18. catch (Exception e)

  19. {

  20. Toast.makeText(getApplicationContext(), R.string.fail, Toast.LENGTH_SHORT).show();

  21. Log.e(tag, e.getMessage());

  22. }

文件名不带路径,直接输入如xy.txt

对于SD卡的操作,需要在AndroidManifest.xml加入权限

  
  1. <!-- 在SDCard中创建和删除文件的权限 -->

  2. <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

  3. <!-- 往SDCard中写入数据的权限 -->

  4. <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徐胖子的专栏” 博客,请务必保留此出处http://woshixy.blog.51cto.com/5637578/1076826

更多相关文章

  1. Android知识体系总结之Android部分之Android本地存储篇
  2. 内容提供者相关技术
  3. Android(安卓)Jni 开发(Android(安卓)studio)
  4. Android学习笔记之Android包、ADB介绍
  5. TextView文字阴影效果以及styles文件的使用
  6. [Android]混淆代码后生成带签名的apk
  7. android:sharedUserId问题
  8. Android(安卓)中自定义属性(attr.xml,TypedArray)的使用!
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android 设置全屏,画图,加载位图
  2. Android的种类与应用
  3. Android 属性动画中心点无限循环
  4. Android绘制圆形图片(五)
  5. Android Studio设置全屏
  6. Android 3G网络下 http refused 解决办法
  7. android dx批处理
  8. 出错:PhoneFactory.getDefaultPhone must
  9. Android之EditView 阻止软键盘自动弹出
  10. JS判断浏览器打开终端