跟我学Android之十二 文件解析与处理

本章内容

第1节  File Explorer操作

第2节  SharedPreferences

第3节  普通文件操作

第4节  SD卡读写操作

本章目标

熟练掌握FileExplorer的用法

熟练掌握SharedPreference文件操作。

熟练掌握普通文件的读写操作。

熟练掌握SD卡读写操作的方法。

FileExplorer操作

查看文件结构

创建文件夹

导入文件

导出文件及文件夹

删除文件

SharedPreferences概述

SharedPreferences主要用于保存类似配置信息的内容,SharedPreferences以XML格式保存数据,保存在/data/data/<package>/shared_prefs目录中,跟Properties中的信息类似,主要是键值对

读取SharedPreferences

首先通过Context. getSharedPreferences方法获得对象

第一个参数是文件名,需要包含后缀名(自动设置为xml)

第二个参数是访问模式,和普通文件的访问模式相同

通过SharedPreferences中的方法读取数据

SharedPreferences sp = getSharedPreferences("config",

Context.MODE_PRIVATE);

Stringusername = sp.getString(“username”,“root”);

Stringpassword = sp.getString(“password”,“123456”);

写入SharedPreferences

首先通过Context. getSharedPreferences方法获得对象

获取对象时采用写模式打开

通过SharedPreferences获得Editor对象

Editor对象中包含了写数据的方法

数据写入完成后一定要执行commit方法让数据生效

SharedPreferences sp = getSharedPreferences("config",

Context.MODE_PRIVATE);

Editor editor =
sp.edit();

editor.put(“username”, “root”);

editor.put(“password”, “123456”);

editor.commit();

pe:solid;mso-style-textfill-fill-themecolor:text1;mso-style-textfill-fill-color:black;mso-style-textfill-fill-alpha:100.0%‘>方法让数据生效

外部访问SharedPreferences

在一个应用中访问另一个应用的SharedPreferences数据

通过Context. createPackageContext 创建Context的实例

第一个参数是另一个应用的package名

第二个参数是选项标志

CONTEXT_INCLUDE_CODE

CONTEXT_IGNORE_SECURITY

通过建立的Context对象访问SharedPreferences

Contextcontext = createPackageContext(PKGNAME,

CONTEXT_IGNORE_SECURITY);

SharedPreferences cfg = context.getSharedPreferences(

PREFERENCE_NAME, MODE);

在一个应用中访问另一个应用的SharedPreferences数据

u关于权限的几个注意点

?两个应用的android:sharedUserId的内容要相同

?双方使用MODE_WORLD_READABLE或MODE_WORLD_WRITEABLE模式读写内容

利用openFileInput读取文件

利用openFileInput读取文件

u这是Context中的一个方法

?能够从应用相关的路径中打开一个文件输入流

u文件位置

?/data/data/<package>/files

u返回值是一个FileInputStream的对象

?这是一个文件输入字节流

利用openFileInput读取文件

u读取文件的一个示例

FileInputStream inputStream = this.openFileInput(fileName);

byte[]bytes = new byte[1024];

ByteArrayOutputStream os= new ByteArrayOutputStream();

while(inputStream.read(bytes)!= -1) {

os.write(bytes, 0, bytes.length);

}

inputStream.close();

os.close();

Stringcontent = new String(os.toByteArray());

showTextView.setText(content);

利用openFileOutput方法写入文件

u文件不存在时自动创建

u方法的第二个参数为打开模式

?MODE_PRIVATE只能创建它的应用访问,重复写入时会文件覆盖

?MODE_APPEND  私有访问,重复写入时会在文件的末尾进行追加

?MODE_WORLD_READABLE公用模式,可读

?MODE_WORLD_WRITEABLE公用模式,可读写

u通常建议使用私有模式

?公用模式下操作文件很危险,因为一旦并发将会带来程序的漏洞

利用openFileOutput方法写入文件

u写入文件示例

FileOutputStream outputStream = openFileOutput(fileName,

Activity.MODE_PRIVATE);

outputStream.write(content.getBytes());

outputStream.flush();

outputStream.close();

合理利用缓存

u文件的读写是对存储设备的访问

?输入输出的速率比较低

?频繁访问时会影响性能

u适当使用缓存提交效率

?将文件中需要频繁访问的内容读入内存

?在内存中进行数据的操作

?定期或者需要时再写入文件

?减少文件的输入输出次数

u但是缓存不能太大,以免占用太多资源导致系统性能下降

浏览SD卡上的文件

uSD卡通常是手机的扩展存储

u挂载到手机操作系统的文件系统下/mnt/sdcard/

uSD卡上的目录对所有应用都是可写的

u使用File类浏览SD卡上的目录内容

mso-color-index:1;mso-font-kerning:12.0pt;language:zh-CN;mso-style-textfill-type:solid;mso-style-textfill-fill-themecolor:text1;mso-style-textfill-fill-color:black;mso-style-textfill-fill-alpha:100.0%‘>公用模式下操作文件很危险,因为一旦并发将会带来程序的漏洞

Filedir = new File(“/mnt/sdcard”);

String[]s = dir.list();

读取SD卡上的文件

u使用FileInputStream或者FileReader进行文件读取

FileInputStream in = new FileInputStream(“/mnt/sdcard/……”);
byte[] bytes = new byte[1024];
ByteArrayOutputStream os= new ByteArrayOutputStream();  

while (in.read(bytes) != -1) {
        os.write(bytes, 0, bytes.length);
}  

in.close();
os.close();
String content = new String(os.toByteArray()); 

showTextView.setText(content);

将文件保存到SD卡上

u使用FileOutputStream或者FileWriter进行文件写入

FileOutputStream out = new FileOutputStream(“/mnt/sdcard/..”);
out.write(content.getBytes());
out.flush();
out.close();
时间: 2024-11-03 01:28:52

跟我学Android之十二 文件解析与处理的相关文章

处女男学Android(十二)---Android 菜单(Menu)详解与应用

一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42170771 本篇blog将记录一下Android中菜单的使用方法,虽然在新版本中推荐使用ActionBar去替代菜单,但我认为菜单依然是挺不错的一种UI交互组件,比ActionBar好点一些,对于手指不灵活的人比起来ActionBar右上角的那个方块小按钮,或许ta会更喜欢Menu呢,废话不多说,下面就具体介绍一下Android中关于Menu的使用方法. 二.创建第一

Android之十二微信UI界面设计

Android之十二微信UI界面设计 corners_bg.xml <span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color=&qu

springMVC3学习(十二)--文件上传优化CommonsMultipartResolver

基于上一篇文件上传发现效率很慢,我们应该对它进行优化  使用springMVC对文件上传的解析器 来处理文件上传的时候需要在spring的applicationContext里面加上springMVC提供的MultipartResolver的申明 这样客户端请求的时候 springMVC会检查request里面是否包含多媒体信息 如果包含了就会使用MultipartResolver进行解析, springMVC会使用一个支持文件  处理的MultipartHttpServletRequest来包

处女男学Android(十四)---Android 重量级数据存储之SQLite

前言 不知不觉的Android基础系列已经写了十三篇了,这是第十四篇~上一篇blog记录了Android中的一种数据存储方案,即共享参数(Sharedpreferences)的使用(处女男学Android(十三)---Android 轻量级数据存储之SharedPreferences).最近初学如何在Android中应用SQLite,写了一个基于ListView的增删查的小例子,本篇blog就记录一下我学习到的如何在Android中操作SQLite持久化客户端数据. 初始化SQLite 关于SQ

处女男学Android(十)---Fragment完结篇之Fragment通信和ListFragment

一.前言 前两篇blog介绍了fragment的基本用法 1.Fragment API简介:如FragmentManager.FragmentTransaction等. 2.定义方式:继承Fragment类并重写onCreat.onCreatView.onPause等. 3.引用方式:通过定义<fragment>标签或者通过FragmentTrasaction实例的add()动态添加Fragment这两种. 4.Fragment回退栈与Fragment生命周期. 关于Fragment剩余的重要

Android入门(十二)SQLite事务、升级数据库

原文链接:http://www.orlion.ga/610/ 一.事务 SQLite支持事务,看一下Android如何使用事务:比如 Book表中的数据都已经很老了,现在准备全部废弃掉替换成新数据,可以先使用delete()方法将Book表中的数据删除, 然后再使用insert()方法将新的数据添加到表中.我们要保证的是,删除旧数据和添加新数据的操作必须一起完成,否则就还要继续保留原来的旧数据.                 Button replaceData = (Button) find

跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全采用以上版本 前面我们在聊服务网关Zuul的时候提到了Gateway,那么Zuul和Gateway都是服务网关,这两个有什么区别呢? 1. Zuul和Gateway的恩怨情仇 1.1 背景 Zuul是Netflix开源的一个项目,Spring只是将Zuul集成在了Spring

Android Studio之Gradle文件解析

本文转载自stormzhang的博客 什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. Gradle 基本概念 下面就以我的开源项目 9GAG 来详细讲解下和Gradle相关的知识, 和Gradle相关的几个文件一般有如下几个: 红色标记部分从上到下咱们来一步步分析: 1. 9GAG/app/build.gradle 这个文件是app文件夹下这个Mod

Android进阶之XML文件解析

xml序列化是把内存数据写入硬盘或SD卡. XML文件解析的方式: 1.dom解析,生成一个树状结构,并全部加入内存,在内存修改树状结构的节点即可.但是消耗内存大. 2.sax解析 基于事件的解析方式.速度快,效率高,但是不能倒退. 3.pull解析 基于事件的解析 pull解析方式: 第一步,初始化解析器,设置要解析的数据流.(此刻指向文档的开始部分) 第二步,得到事件. 第三步,总的节点集合. 第四步,单个节点. public class PullXMLTools { public Pull