注: 在Activity中有 getFileDir() 和 getCacheDir(); 方法可以获得当前的手机自带的存储空间中的当前包文件的路径
getFileDir() ----- /data/data/cn.xxx.xxx(当前包)/files
getCacheDir() ----- /data/data/cn.xxx.xxx(当前包)/cache

  1. 1. 编写文件读取与写入功能实现类 FileService
  2. package cn.android.service;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import android.content.Context;
  7. import android.util.Log;
  8. /**
  9. * 文件保存与读取功能实现类
  10. * @author Administrator
  11. *
  12. * 2010-6-28 下午08:15:18
  13. */
  14. public class FileService {
  15. public static final String TAG = "FileService";
  16. private Context context;
  17. //得到传入的上下文对象的引用
  18. public FileService(Context context) {
  19. this.context = context;
  20. }
  21. /**
  22. * 保存文件
  23. *
  24. * @param fileName 文件名
  25. * @param content  文件内容
  26. * @throws Exception
  27. */
  28. public void save(String fileName, String content) throws Exception {
  29. // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀
  30. if (!fileName.endsWith(".txt")) {
  31. fileName = fileName + ".txt";
  32. }
  33. byte[] buf = fileName.getBytes("iso8859-1");
  34. Log.e(TAG, new String(buf,"utf-8"));
  35. fileName = new String(buf,"utf-8");
  36. Log.e(TAG, fileName);
  37. // Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
  38. // Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
  39. // Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
  40. // MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
  41. // 如果希望文件被其他应用读和写,可以传入:
  42. // openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
  43. FileOutputStream fos = context.openFileOutput(fileName, context.MODE_PRIVATE);
  44. fos.write(content.getBytes());
  45. fos.close();
  46. }
  47. /**
  48. * 读取文件内容
  49. *
  50. * @param fileName 文件名
  51. * @return 文件内容
  52. * @throws Exception
  53. */
  54. public String read(String fileName) throws Exception {
  55. // 由于页面输入的都是文本信息,所以当文件名不是以.txt后缀名结尾时,自动加上.txt后缀
  56. if (!fileName.endsWith(".txt")) {
  57. fileName = fileName + ".txt";
  58. }
  59. FileInputStream fis = context.openFileInput(fileName);
  60. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  61. byte[] buf = new byte[1024];
  62. int len = 0;
  63. //将读取后的数据放置在内存中---ByteArrayOutputStream
  64. while ((len = fis.read(buf)) != -1) {
  65. baos.write(buf, 0, len);
  66. }
  67. fis.close();
  68. baos.close();
  69. //返回内存中存储的数据
  70. return baos.toString();
  71. }
  72. }
  73. 2. 编写Activity类:
  74. package cn.android.test;
  75. import android.app.Activity;
  76. import android.os.Bundle;
  77. import android.util.Log;
  78. import android.view.View;
  79. import android.widget.Button;
  80. import android.widget.EditText;
  81. import android.widget.Toast;
  82. import cn.android.service.FileService;
  83. public class TestAndroidActivity extends Activity {
  84. /** Called when the activity is first created. */
  85. //得到FileService对象
  86. private FileService fileService = new FileService(this);
  87. //定义视图中的filename输入框对象
  88. private EditText fileNameText;
  89. //定义视图中的contentText输入框对象
  90. private EditText contentText;
  91. //定义一个土司提示对象
  92. private Toast toast;
  93. @Override
  94. public void onCreate(Bundle savedInstanceState) {
  95. super.onCreate(savedInstanceState);
  96. setContentView(R.layout.main);
  97. //得到视图中的两个输入框和两个按钮的对象引用
  98. Button button = (Button)this.findViewById(R.id.button);
  99. Button read = (Button)this.findViewById(R.id.read);
  100. fileNameText = (EditText) this.findViewById(R.id.filename);
  101. contentText = (EditText) this.findViewById(R.id.content);
  102. //为保存按钮添加保存事件
  103. button.setOnClickListener(new View.OnClickListener() {
  104. @Override
  105. public void onClick(View v) {
  106. String fileName = fileNameText.getText().toString();
  107. String content = contentText.getText().toString();
  108. //当文件名为空的时候,提示用户文件名为空,并记录日志。
  109. if(isEmpty(fileName)) {
  110. toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG);
  111. toast.setMargin(RESULT_CANCELED, 0.345f);
  112. toast.show();
  113. Log.w(fileService.TAG, "The file name is empty");
  114. return;
  115. }
  116. //当文件内容为空的时候,提示用户文件内容为空,并记录日志。
  117. if(isEmpty(content)) {
  118. toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_content, Toast.LENGTH_LONG);
  119. toast.setMargin(RESULT_CANCELED, 0.345f);
  120. toast.show();
  121. Log.w(fileService.TAG, "The file content is empty");
  122. return;
  123. }
  124. //当文件名和内容都不为空的时候,调用fileService的save方法
  125. //当成功执行的时候,提示用户保存成功,并记录日志
  126. //当出现异常的时候,提示用户保存失败,并记录日志
  127. try {
  128. fileService.save(fileName, content);
  129. toast = Toast.makeText(TestAndroidActivity.this, R.string.success, Toast.LENGTH_LONG);
  130. toast.setMargin(RESULT_CANCELED, 0.345f);
  131. toast.show();
  132. Log.i(fileService.TAG, "The file save successful");
  133. catch (Exception e) {
  134. toast = Toast.makeText(TestAndroidActivity.this, R.string.fail, Toast.LENGTH_LONG);
  135. toast.setMargin(RESULT_CANCELED, 0.345f);
  136. toast.show();
  137. Log.e(fileService.TAG, "The file save failed");
  138. }
  139. }
  140. });
  141. //为读取按钮添加读取事件
  142. read.setOnClickListener(new View.OnClickListener() {
  143. @Override
  144. public void onClick(View v) {
  145. //得到文件名输入框中的值
  146. String fileName = fileNameText.getText().toString();
  147. //如果文件名为空,则提示用户输入文件名,并记录日志
  148. if(isEmpty(fileName)) {
  149. toast = Toast.makeText(TestAndroidActivity.this, R.string.empty_filename, Toast.LENGTH_LONG);
  150. toast.setMargin(RESULT_CANCELED, 0.345f);
  151. toast.show();
  152. Log.w(fileService.TAG, "The file name is empty");
  153. return;
  154. }
  155. //调用fileService的read方法,并将读取出来的内容放入到文本内容输入框里面
  156. //如果成功执行,提示用户读取成功,并记录日志。
  157. //如果出现异常信息(例:文件不存在),提示用户读取失败,并记录日志。
  158. try {
  159. contentText.setText(fileService.read(fileName));
  160. toast = Toast.makeText(TestAndroidActivity.this, R.string.read_success, Toast.LENGTH_LONG);
  161. toast.setMargin(RESULT_CANCELED, 0.345f);
  162. toast.show();
  163. Log.i(fileService.TAG, "The file read successful");
  164. catch (Exception e) {
  165. toast = Toast.makeText(TestAndroidActivity.this, R.string.read_fail, Toast.LENGTH_LONG);
  166. toast.setMargin(RESULT_CANCELED, 0.345f);
  167. toast.show();
  168. Log.e(fileService.TAG, "The file read failed");
  169. }
  170. }
  171. });
  172. }
  173. //编写一个isEmpty方法,判断字符串是否为空
  174. private boolean isEmpty(String s) {
  175. if(s == null || "".equals(s.trim())) {
  176. return true;
  177. }
  178. return false;
  179. }
  180. }

转载于:https://www.cnblogs.com/jiezzy/archive/2012/04/21/2462191.html

getCacheDir用法相关推荐

  1. Android Volley完全解析1:初识Volley的基本用法

    原文链接:http://blog.csdn.net/guolin_blog/article/details/17482165,CSDN 郭霖 1. Volley简介 我们平时在开发Android应用的 ...

  2. 关于Retrofit用法

    Retrofit用法 一. 简介 随着Google对HttpClient 摒弃,和Volley的逐渐没落,OkHttp开始异军突起,而Retrofit则对okHttp进行了强制依赖. Retrofit ...

  3. Fresco用法详解

    版权声明:本文为延成原创文章,转载请标明出处 Fresco用法详解 经过在实际项目中多次的使用,本人在这做了一下简单总结,希望对初次使用和正在使用的你们有所帮助. 官方地址 官方github地址:ht ...

  4. fresco的基本用法

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/53137867 Fresco是Facebook开源Android平台上一个强大的图片加 ...

  5. Android数据存储几种方式用法总结

    Android数据存储几种方式用法总结 1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存 ...

  6. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  7. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  8. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  9. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

最新文章

  1. LeetCode Interleaving String(动态规划)
  2. LeetCode Median of Two Sorted Arrays (DFS)
  3. 记一次工作中的小BUG
  4. Aspnet Core 对 Resetful API版本的支持
  5. JAVA泛型--待续
  6. Python语法特点如注释规则、代码缩进、编码规范等
  7. 2017-2018-1 20155213 《信息安全系统设计基础》第十一周学习总结
  8. 趣图:只有程序员才能看懂这个疫情号召
  9. centos7安装Hive2.3.0
  10. SimpleDateFormat线程不安全了?这里有5种解决方案
  11. 教你如何找网络上的图片素材
  12. python备份文件最简单案例_Python实现备份文件实例
  13. Bailian2727 还是采药问题【模拟】
  14. Zxw图纸,鑫制造图纸,蓝瑞图纸,猎人图纸,维修宝典,刚开通 的带维修案例平台
  15. GetWindowRect,GetClientRect,ScreenToClient MoveWindow SetWindowPos 用法说明
  16. 双输出基准电压电路/自己备忘
  17. ckplayer ajax,谁能帮我做一个脚本啊?能让这个网页视频播放可以拉动进度条 可以快进...
  18. 大数据战略上升为国家战略,悄悄告诉你大数据大牛都在读的8本书
  19. 修复我的世界ice服务器的指令,我的世界 基岩版:服务器清理命令
  20. python调用多级目录中的文件_python复制多层目录下的文件至其他盘符对应的目录中...

热门文章

  1. python rbf神经网络_原创,基于径向基函数(RBF)神经网络RBF网络的举例应用!
  2. 设计模式复习-装饰模式
  3. hdu3400 两重三分
  4. 【开发环境】为 Visual Studio Community 2013 版本安装中文语言包 ( 安装 Test Agents 2013 | 安装 Visual Studio 2013 简体中文 )
  5. 【EventBus】事件通信框架 ( 发送事件 | 判断发布线程是否是主线程 | 子线程切换主线程 | 主线程切换子线程 )
  6. 【错误记录】Android Studio 编译报错 ( AppCompat does not support the current theme features )
  7. 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 )
  8. 那些做的“不够好”的父母,他们可能已经做到了自己的100分
  9. 417 Pacific Atlantic Water Flow 太平洋大西洋水流
  10. phpstudy composer 安装YII2