文档章节

文件存储

 梦想家Peng
发布于 2016/03/02 11:31
字数 1402
阅读 17
收藏 0
点赞 1
评论 0

将数据以文件的形式存储在本地。

根据存储的位置不同,区分为:内部存储、外部存储、缓存存储。

内部存储:

表现为将文件存储在应用程序的数据文件夹(/data/data/应用程序的包名/)中的files文件夹中

使用openFileOutput()即可获取输出流,用于写出文件,或者使用openFileInput()获取输入流,用于读取文件。

以上这2个方法都是由ContextWrapper定义的方法。

关于内部存储的其它管理:

// 获取内部存储的目录,表现为 /data/data/包名/files

File dir = getFilesDir();

// 获取指定名称的文件夹

File docDir = getDir("doc", MODE_PRIVATE);

// 删除指定的文件

boolean isSuccess = deleteFile("hello.txt");

// 获取文件列表

String[] files = fileList();

内部存储的数据都是可以被清除的:在“应用”的管理界面里,可以选择“清除数据”,或者,在应用程序被卸载时清除。

外部存储:

表现为可以被任何应用程序访问到的位置,通常是/mnt/sdcard/下的文件夹,外部存储应该用于保存对私密性没有要求,且应用程序对它们没有依赖性的数据。

外部存储不是任何时候都可以用的。使用Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())可以进行判断。


缓存存储:

缓存适用于存储临时需要使用到的数据或文件,这些数据或文件可能在一段时间之后就没有存在的意义了。

缓存也区分为内部和外部。通过getCacheDir()方法可以获取内部缓存文件夹的File对象,通过getExternalCacheDir()方法可以获取外部缓存文件夹的File对象。


外部存储中的媒体文件

-------------------------

媒体文件:图片、音频、视频

Android系统具有扫描媒体文件的功能,当扫描到媒体文件时,将把文件的相关信息记录在数据库中。

在Android原生系统中,有各种媒体播放工具,例如:图库、音乐等,这些工具显示的数据并不直接来自于存储设备,而是从数据库中读取的。

MediaScannerConnection.scanFile(Context context, String[] paths, String[] mimeTypes, OnScanCompletedListener callback)方法可以通知扫描程序进行实时扫描。

SQLite数据库

数据库:存储数据的仓库,每一个数据库都可以存在多张数据表

数据表:具体存储数据的表,类似excel表格

常见的数据库有:MS SQL Server、MY SQL、Oracle……

SQLite并不是数据库服务器软件,在开发中,它表现为某1个文件。

查看SQLite数据文件的软件:SQLiteSpy、SQLiteExpert


SQLite

---------------------------

【初始化过程】

1. 创建数据库

2. 创建数据表

【访问数据流程】

1. 连接到(打开)数据库

2. 访问数据表


创建数据库

方法1:openOrCreateDatabase()


创建数据表

CREATE TABLE '表名' (设计字段列表);

字段列表的格式为:字段(列)名、数据类型、约束

创建数据表示例:

String sql = "CREATE TABLE 'student' (" +

"_id integer primary key autoincrement, " +

"stu_name varchar(16) not null, " +

"stu_phone_number varchar(16) not null unique" +

")";

注意:SQLite是非常轻量级的数据库,所以,SQLite对存储的数据类型要求是不严格的,但是,仍然推荐规范的使用SQLite数据库。

eg:

String name = "tedu.db";
		int mode = MODE_PRIVATE;
		CursorFactory factory = null;
		SQLiteDatabase db;
		db = openOrCreateDatabase(name, mode, factory);
		
		// 创建数据表
		String sql = "CREATE TABLE 'student' (" +
				"_id integer primary key autoincrement, " +
				"stu_name varchar(16) not null, " +
				"stu_phone_number varchar(16) not null unique" +
				")";
		db.execSQL(sql);

数据操作:增删改查

增:insert into '表名' (字段列表) values (值列表)

删:delete from '表名' where子句

改:update '表名' set 字段=值的赋值列表 where子句

查:select 字段列表 from '表名' where子句 排序 分页


使用SQLiteDatabase实现数据管理

insert()

  第1个参数:表名

  第2个参数:无视,当确保第3个参数为有效值时,第2个参数没有任何意义

  第3个参数:确定要增加的数据,第3个参数ContentValues对象必须至少调用过1次put方法,即可使得该参数是有效的

  返回值:新记录的ID,如果增加失败,则返回-1

  eg:

// 无视,当确保第3个参数为有效值时,第2个参数没有任何意义
String nullColumnHack = null;
// 确定要增加的数据
ContentValues values = new ContentValues();
values.put("stu_name", "Alex");
values.put("stu_phone_number", "010-88668866");
// 执行增加数据
long id = db.insert(table, nullColumnHack, values);
if (id != -1) {
Toast.makeText(this, "增加完成,id=" + id, Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(this, "增加失败,原因嘛,不知道", Toast.LENGTH_SHORT).show();
}

delete()

  第1个参数:表名

  第2个参数:where子句,其中各字段对应的值(例如_id=1)可以使用问号(?)表示,如果使用问号,则对应的值需要在第3个参数中体现

  第3个参数:第2个参数中各问号对应的值,如果第2个参数中没有问号,则第3个参数可以为null

  返回值:受影响的行数,即删除的条目数量

eg:

// delete from student where id>1
// delete from student where stu_name='Jack' and
// stu_phone_number='010-88886666'
// 第2个参数:where子句,其中各字段对应的值(例如_id=1)可以使用问号(?)表示,如果使用问号,则对应的值需要在第3个参数中体现
String whereClause = "stu_name=? and stu_phone_number=?";
// 第3个参数:第2个参数中各问号对应的值,如果第2个参数中没有问号,则第3个参数可以为null
String[] whereArgs = { "Jack", "027-66668888" };
int affectedRows = db.delete(table, whereClause, whereArgs);
if (affectedRows > 0) {
Toast.makeText(this, "删除完成,受影响的行数:" + affectedRows,
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "删除失败,没有符合删除条件的记录!", Toast.LENGTH_SHORT)
.show();
}


© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 33
码字总数 15605
作品 0
深圳
存储知识整理

一、数据存储类型 数据存储常见的类型有数据块存储、文件方式存储、对象存储。块存储和文件存储就是通常说的SAN和NAS,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象...

hncscwc ⋅ 2016/03/07 ⋅ 2

[翻译]Android教程-保存数据-保存文件

来源: http://developer.android.com/training/basics/data-storage/files.html Android使用了一种类似于其它平台上基于磁盘文件系统的文件系统. 本节课描述了如何使用 File API在Android文...

LeoXu ⋅ 2014/05/18 ⋅ 0

FastDFS介绍

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体...

亮公子 ⋅ 2017/07/12 ⋅ 0

文件、块、对象存储类型了解

块存储和文件存储是我们比较熟悉的两种主流的存储类型,就是我们通常所说的SAN和NAS。在安防监控领域的以IPSAN和IPNAS最为常见。而对象存储(Object-Based Storage)是一种新兴的存储架构,基...

莫问viva ⋅ 2016/03/21 ⋅ 0

对象存储、块存储、文件存储的区别

参考链接 http://www.infoq.com/cn/articles/virtual-forum-three-basic-issues-about-distributed-storage 分布式存储的应用场景相对于其存储接口,现在流行分为三种: 对象存储: 也就是通常...

墨持alvin ⋅ 01/11 ⋅ 0

块存储、文件存储、对象存储这三者和分布式文件存储系统的本质区别

块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device...

English0523 ⋅ 2016/05/18 ⋅ 0

对象存储文件系统简介

一、引言 高性能计算已由传统的主机方式逐渐向集群方式演变,如TOP500中,1998年只有2台系统是集群方式,而到2003年已有208台为集群系统。随着高性能计算体系结构的发展变化,传统的基于主机...

天夣 ⋅ 2013/07/24 ⋅ 0

分布式文件系统FastDFS原理介绍

在生产中我们一般希望文件系统能帮我们解决以下问题,如:1.超大数据存储;2.数据高可用(冗余备份);3.读/写高性能;4.海量数据计算。最好还得支持多平台多语言,支持高并发。 由于单台服务...

凯文加内特 ⋅ 2015/04/18 ⋅ 0

详解Silverlight 2中的独立存储(Isolated Storage)

概述 独立存储(Isolated Storage)是Silverlight 2中提供的一个客户端安全的存储,它是一个与Cookie机制类似的局部信任机制。独立存储机制的APIs 提供了一个虚拟的文件系统和可以访问这个虚...

技术小甜 ⋅ 2017/11/16 ⋅ 0

oracle体系结构之数据库结构

oracle体系结构之数据库结构 oracle数据库包含两个组成部分:数据库和实例 数据库(database):特指存储数据和相关对象的一系列物理文件。 实例(instance):特指一系列操作系统进程和它管...

i33 ⋅ 2012/11/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

10个免费的服务器监控工具

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服...

李朝强 ⋅ 30分钟前 ⋅ 0

压缩工具之zip-tar

zip 支持目录压缩。使用yum安装zip包,使用yum安装unzip包 zip 1.txt.zip 1.txt #将1.txt文件压缩,新生成的压缩文件为1.txt.zip,原文件保留 zip -r 123.zip 123/ #-r对目录操作。将123/目录...

ZHENG-JY ⋅ 31分钟前 ⋅ 0

Dubbo @Activate注解使用和实现解析

Activate注解标识一个扩展是否被激活和使用,可以放在定义的类上和方法上,dubbo用它在SPI扩张类定义上,标识这个扩展实现激活的条件和时机,先看下定义: /** * Activate * <p/> * ...

哲别0 ⋅ 38分钟前 ⋅ 0

6.5 zip压缩工具 tar打包 打包并压缩

1.tar tar命令格式 [-zjxcvfpP] filename tar -z:表示同时用gzip压缩。 -j:表示同时用bzip2压缩。 -J:表示同时用xz压缩。 -x:表示解包或者解压缩。 -t:表示查看tar包里的文件。 -c:表示建...

oschina130111 ⋅ 40分钟前 ⋅ 0

Linux系统工程狮养成记

如今的社会,随着时代的发展,出现了很多职业,像电子类,计算机类的专业,出现了各种各样的工程师,有算法工程师,java工程师,前端工程师,后台工程师,Linux工程师,运维工程师等等,不同...

六库科技 ⋅ 46分钟前 ⋅ 0

Linux 机器的渗透测试命令备忘表

如下是一份 Linux 机器的渗透测试备忘录,是在后期开发期间或者执行命令注入等操作时的一些典型命令,设计为测试人员进行本地枚举检查之用。 此外,你还可以从这儿(https://gbhackers.com/c...

寰宇01 ⋅ 48分钟前 ⋅ 0

windows 安装java开发环境,配置jdk

下载jdk安装文件 链接:https://pan.baidu.com/s/1UEKPjnAdMqNj612B39Pfsg 密码:ipqx 如果javac无法使用 1,检查环境变量名称中是否有空格。。。,去除后即可 2,将JAVA_HOME替换为原始路径...

阿豪boy ⋅ 49分钟前 ⋅ 0

简析log4j的实现方式

刚加入新公司,对日志的要求比较严格,对此特意花了几天时间看了一下log4j的源码,大概了解了一下log4j的实现方式,总结如下: log4j的实现分为两个步骤:log4j.xml的加载,logger的使用 这里...

zdatbit ⋅ 今天 ⋅ 0

win环境下jdk7与jdk8共存配置

1.jdk安装包 jdk安装包 安装步骤略 2.jdk等配置文件修改 在安装JDK1.8时(本机先安装jdk1.7再安装的jdk1.8),会将java.exe、javaw.exe、javaws.exe三个文件copy到了C:\Windows\System32,这...

泉天下 ⋅ 今天 ⋅ 0

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部