文件管理与XMl、JSON解析
1、使用内部存储器
你可以直接保存文件在设备的内部存储。默认情况下,文件保存在你的应用程序的内部存储,其他应用程序或用户不能访问。当用户卸载你的应用城西是,这些文件被删除。
(一)在内部存储创建并写入私有文件:
(1)调用openFileOutputStream(name,model)方法,返回一个FileOutputStream,name参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,会自动创建它。创建的文件保存在/data/data/<package name>/files/目录中,model参数指的是使用模式,分别有:
MODE_PRIVATE:私有(创建此文件的应用能够使用,其他应用不能访问),写入文件会覆盖原来的内容
MODE_APPEND:私有,在原有内容上增加数据
(2)调用write方法把数据写入文件
(3)调用close方法关闭流
/**
* 写入私有文件
* @param view
*/
public void writePrivateFile(View view) {
try {
OutputStream out = openFileOutput("ake.tex", Context.MODE_PRIVATE);
String info = "我是中国人";
byte[] bytes = info.getBytes();
//写入
out.write(bytes, 0, bytes.length);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
读取私有文件:
/**
* 读取私有文件
*
* @param view
*/
public void readPrivateFile(View view) {
try {
InputStream inputStream = openFileInput("test.txt");
byte[] bytes = new byte[1024];
StringBuffer sb = new StringBuffer();
int len = -1;
while ((len = inputStream.read(bytes)) != -1) {
sb.append(new String(bytes, 0, len));
}
inputStream.close();
Toast.makeText(MainActivity.this, sb, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
保存内部缓存文件:
如果你想缓存一些数据,而不是永久保存,可以使用getCacheDir()打开文件所在的目录,代表内部应用程序应保存临时缓存文件。
当设备的内部存储空间低,Android可以删除这些缓存文件以回收空间。然而,你不应该依赖系统清除这些文件,应该自己维护缓存文件,并保持在一个合理的小号空间的限制,如1M,当用户卸载应用时,这些文件被删除。
通过getCacheDir()获取的目录为:/data/data/<package name>/cache
/**
* 写入一个缓存文件
* @param view
*/
public void writePrivateCacheData(View view) {
// String file = getCacheDir() + "/temp.tap";
try {
//创建一个缓存的文件路径
File temp = File.createTempFile("temp.tmp", null, getCacheDir());
FileOutputStream out = new FileOutputStream(temp);
PrintStream ps = new PrintStream(out);
ps.print("测试测试测试");
ps.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
其他有用的方法:
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系统权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
既要读也要写权限,柯旭添加WRITE_EXTERNAL_STORAGE即可
(二)检查媒体的可用性
在使用外部存储来保存数据时,我们应该使用getExternalStorageState()来检查当前设备是否存在外部存储设备(SDCard),否则将会发生意外。
public void isSDCard(View view) {
//判断是否有SD卡
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(MainActivity.this, "有SD卡", Toast.LENGTH_SHORT).show();
//是否只读
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {
Toast.makeText(MainActivity.this, "SD卡是只读的", Toast.LENGTH_SHORT).show();
} //获取SD卡的路径
//Environment.getExternalStorageDirectory().getPath();
} else {
Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_SHORT).show();
} }
(三)外部存储保存私有缓存文件
通过Context.getExternalFileDir()方法可以获取到SDCard/Android/data/你的应用包名/files/目录,一般放一些长时间保存的数据。
通过Context.getExternalCacheDir()方法可以获取到SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用包名/这个迷路下的所有文件都会被删除,不会留下垃圾信息。
而且上面两个目录分别对应 设置-应用-应用详情里面的“清除数据”与“清除缓存”选项。
文件管理与XMl、JSON解析的更多相关文章
- XML JSON解析--基本功能
一,json的解析 json文件: {"code": "cn","cities": [{"name": " ...
- UI学习笔记---第十六天XML JSON解析
一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- Theme皮肤文件(json解析、多文件管理)
一 官方教程 http://developer.egret.com/cn/github/egret-docs/extension/EUI/skin/theme/index.html 二 thm主题文 ...
- iOS-数据持久化基础-JSON与XML数据解析
解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.X ...
- iOS开发笔记3:XML/JSON数据解析
这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...
- Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题
1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...
- JSON解析和XML解析
一. XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架 经常用到的方法: 1.- (id)initWithXMLString:(NSStrin ...
- Android基础总结(12)——XML和JSON解析
XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
随机推荐
- Linux初学者:从不同角度理解Linux系统
在我初学Linux系统时,虽然已经掌握了一些命令,但总觉得还是很混乱.大家新买的笔记本如果是Windows系统,那么第一件事往往就是分区,目的就是将系统和软件分开.然而Linux却没有类似于Windo ...
- Xshell Error Report,Program has stopped working
xftp和xshell突然都无法运行并报错如图 图中的意思是,xshell有错误,官方想收集错误.可是也不能给你发送了,还这样啊. 解决办法 1.卸载Xshell和Xftp,重新安装. 参考:http ...
- redis sentinel搭建
/usr/local/bin /usr/local/etc https://www.centos.bz/2017/08/redis-3-x-sentinel-ha-service/ https://w ...
- Django笔记&教程 6-2 表单(Form)基础操作
Django 自学笔记兼学习教程第6章第2节--表单(Form)基础操作 点击查看教程总目录 1 - 编写表单类 创建新的表单类的代码,一般写到一个专门的forms.py文件中(一般放在对应的app文 ...
- Typora下载安装教程
Typoa下载和安装 Typora---程序员记事本!!! 这里我们选择Typora作为我们的编辑器,功能的强大需要各位自己去体会. Typora下载地址 点击链接打开,然后选择Download! 根 ...
- 通过小乌龟从本地主机删除远端svn服务器端的代码或图片文件
先说解决方案,如果通过windows的右键删除,再次Commit还是会下拉下来,所以需要通过小乌龟的删除来删除这个文件,在删除的那个文件夹里再次提交即可. 图片 1. 选中要删除的文件 2. 右键通过 ...
- [atARC123F]Insert Addition
前置知识 下面,先来介绍一下Stern-Brocot Tree的结构: 其是一棵满二叉树,每一个节点都是一个最简分数,其中根为$\frac{1}{1}$ 假设前$i$层的中序遍历分数依次为$\frac ...
- Java 代码审计 — 1. ClassLoader
参考: https://www.bilibili.com/video/BV1go4y197cL/ https://www.baeldung.com/java-classloaders https:// ...
- Swift-技巧(九)CGImage To CVPixelBuffer
摘要 iOS 中图像的表现形式不只是 Image,还有更加底层的方式,比如 CVPixelBuffer 像素缓存形式,那么 CGImage 就可以转换为像素缓存的方式也是需要了解的. CGImage ...
- SpringBoot引入第三方jar的Bean的三种方式
在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便. 因此本篇博文也不再介绍Spring中通过xml来声明bean的使用方式. 一.注解 ...