1、使用内部存储器

你可以直接保存文件在设备的内部存储。默认情况下,文件保存在你的应用程序的内部存储,其他应用程序或用户不能访问。当用户卸载你的应用城西是,这些文件被删除。

(一)在内部存储创建并写入私有文件:

(1)调用openFileOutputStream(name,model)方法,返回一个FileOutputStream,name参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,会自动创建它。创建的文件保存在/data/data/<package name>/files/目录中,model参数指的是使用模式,分别有:

MODE_PRIVATE:私有(创建此文件的应用能够使用,其他应用不能访问),写入文件会覆盖原来的内容

MODE_APPEND:私有,在原有内容上增加数据

(2)调用write方法把数据写入文件

(3)调用close方法关闭流

  1. /**
  2. * 写入私有文件
  3. * @param view
  4. */
  5. public void writePrivateFile(View view) {
  6. try {
  7. OutputStream out = openFileOutput("ake.tex", Context.MODE_PRIVATE);
  8. String info = "我是中国人";
  9. byte[] bytes = info.getBytes();
  10. //写入
  11. out.write(bytes, 0, bytes.length);
  12. out.close();
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. }
  16. }

读取私有文件:

  1. /**
  2. * 读取私有文件
  3. *
  4. * @param view
  5. */
  6. public void readPrivateFile(View view) {
  7. try {
  8. InputStream inputStream = openFileInput("test.txt");
  9. byte[] bytes = new byte[1024];
  10. StringBuffer sb = new StringBuffer();
  11. int len = -1;
  12. while ((len = inputStream.read(bytes)) != -1) {
  13. sb.append(new String(bytes, 0, len));
  14. }
  15. inputStream.close();
  16. Toast.makeText(MainActivity.this, sb, Toast.LENGTH_SHORT).show();
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. }

保存内部缓存文件:

如果你想缓存一些数据,而不是永久保存,可以使用getCacheDir()打开文件所在的目录,代表内部应用程序应保存临时缓存文件。

当设备的内部存储空间低,Android可以删除这些缓存文件以回收空间。然而,你不应该依赖系统清除这些文件,应该自己维护缓存文件,并保持在一个合理的小号空间的限制,如1M,当用户卸载应用时,这些文件被删除。

通过getCacheDir()获取的目录为:/data/data/<package name>/cache

  1. /**
  2. * 写入一个缓存文件
  3. * @param view
  4. */
  5. public void writePrivateCacheData(View view) {
  6. // String file = getCacheDir() + "/temp.tap";
  7. try {
  8. //创建一个缓存的文件路径
  9. File temp = File.createTempFile("temp.tmp", null, getCacheDir());
  10. FileOutputStream out = new FileOutputStream(temp);
  11. PrintStream ps = new PrintStream(out);
  12. ps.print("测试测试测试");
  13. ps.close();
  14. out.close();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. }

其他有用的方法:

getFileDir()  获取私有文件目录:/data/data/<package name>/files

getDiary() 创建(或打开已存在的) 目录:/data/data/<package name>/app_<文件名>

deleteFile(name)  删除私有目录的文件  :/data/data/<package name>/files

fileList()  获取/data/data/<package name>/files目录的文件名数组

2、使用外部存储器(SD卡)

所有兼容Android的设备都支持一个可共享的“外部存储”(external storage),可用来保存文件。这可以使一个可移动的存储设备(比如SD卡)或者一个内部的(不可移动的)存储。保存在外部存储的文件是可读的。并且当用于传输数据的USB大容量存储选项启动时,用户能够在计算机上修改它们

(一)获取外部存储权限

为了在外部存储或写文件,必须要获得android.permission.READ_EXTERNAL_STORAGE或android.permission.WRITE_EXTERNAL_STORAGE系统权限。

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

既要读也要写权限,柯旭添加WRITE_EXTERNAL_STORAGE即可

(二)检查媒体的可用性

在使用外部存储来保存数据时,我们应该使用getExternalStorageState()来检查当前设备是否存在外部存储设备(SDCard),否则将会发生意外。

  1. public void isSDCard(View view) {
  2. //判断是否有SD卡
  3. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  4. Toast.makeText(MainActivity.this, "有SD卡", Toast.LENGTH_SHORT).show();
  5. //是否只读
  6. if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
  7. Toast.makeText(MainActivity.this, "SD卡是只读的", Toast.LENGTH_SHORT).show();
  8. }
  9.  
  10. //获取SD卡的路径
  11. //Environment.getExternalStorageDirectory().getPath();
  12. } else {
  13. Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_SHORT).show();
  14. }
  15.  
  16. }

(三)外部存储保存私有缓存文件

通过Context.getExternalFileDir()方法可以获取到SDCard/Android/data/你的应用包名/files/目录,一般放一些长时间保存的数据。

通过Context.getExternalCacheDir()方法可以获取到SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用包名/这个迷路下的所有文件都会被删除,不会留下垃圾信息。

而且上面两个目录分别对应 设置-应用-应用详情里面的“清除数据”与“清除缓存”选项。

文件管理与XMl、JSON解析的更多相关文章

  1. XML JSON解析--基本功能

    一,json的解析 json文件: {"code": "cn","cities":   [{"name": " ...

  2. UI学习笔记---第十六天XML JSON解析

    一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML ...

  3. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  4. Theme皮肤文件(json解析、多文件管理)

    一  官方教程 http://developer.egret.com/cn/github/egret-docs/extension/EUI/skin/theme/index.html 二 thm主题文 ...

  5. iOS-数据持久化基础-JSON与XML数据解析

    解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.X ...

  6. iOS开发笔记3:XML/JSON数据解析

    这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...

  7. Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

    1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...

  8. JSON解析和XML解析

    一. XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架 经常用到的方法: 1.- (id)initWithXMLString:(NSStrin ...

  9. Android基础总结(12)——XML和JSON解析

    XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...

  10. iOS开发——网络Swift篇&JSON与XML数据解析

    JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit)   一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...

随机推荐

  1. 详细剖析Spring Cloud 和Spring Cloud Alibaba的前世今生

    我们知道spring cloud可以用来开发微服务,但是应该很少有人真正知道Spring Cloud是什么. 官方的解释是:spring cloud提供了一些可以让开发者快速构建分布式应用的工具,这些 ...

  2. 『学了就忘』Linux基础命令 — 36、查看系统痕迹相关命令

    目录 1.w命令 2.who命令 3.last命令 4.lastlog命令 5.lastb命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./var/run/utmp./var/lo ...

  3. Linux ns 3. Mnt Namespace 详解

    1. 文件系统层次化 对 Linux 系统来说一切皆文件,Linux 使用树形的层次化结构来管理所有的文件对象. 完整的Linux文件系统,是由多种设备.多种文件系统组成的一个混合的树形结构.我们首先 ...

  4. MarkdownPad2 注册码

    邮箱: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6b ...

  5. Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解

    Redis的哨兵机制是官方推荐的一种高可用(HA)方案,我们在使用Redis的主从结构时,如果主节点挂掉,这时是不能自动进行主备切换和通知客户端主节点下线的. Redis-Sentinel机制主要用三 ...

  6. Java 初始化与清理

    用构造器确保初始化 如何自定义构造器(constructor)? 构造器方法的名称与类名相同,并且没有返回值. 需要注意,在定义构方法时,方法名前面不要添加任何的类型说明符,格式:类名(){},构造方 ...

  7. 大爽Python入门教程 3-1 布尔值: True, False

    大爽Python入门公开课教案 点击查看教程总目录 1 布尔值介绍 从判断说起 回顾第一章介绍的简单的判断 >>> x = 10 >>> if x > 5: ...

  8. Maven 源码解析:依赖调解是如何实现的?

    系列文章目录(请务必按照顺序阅读): Maven 依赖调解源码解析(一):开篇 Maven 依赖调解源码解析(二):如何调试 Maven 源码和插件源码 Maven 依赖调解源码解析(三):传递依赖, ...

  9. [noi707]LP

    (以下用$Sa=\sum_{j=1}^{i}xi\cdot ai$,Sb和Sc同理)令f[i][x]表示前i个数,$Sa\le x\le Sb$时最小的Sc考虑第i个数是否选择,可以得到递推式$f[i ...

  10. 软虹sdk基本使用

    虹软SDK的简单使用 Java实现人脸识别,但是又不会自己实现算法,找SDK时发现了虹软.虹软SDK具有免费.识别率高等优点,然后到网上搜这个SDK的教程,没搜到,就自己探索,发现它自带的官方文档其实 ...