# Android文件存储和数据库基本知识
16lz
2022-07-04
课程内容: 数据存储
- Android中的内部存储空间的文件存储;
- Android中sd卡的文件存储;
- 数据库和sql语句;
一,linux文件系统目录结构
linux只有一套文件系统目录结构,唯一的起点称为根目录/,其它分区是通过挂载方式使用。
d -> /sys/kernel/debug
路径一开头第一个/叫根目录,后面的/称为路径分隔符- linux文件类型,d - l
- d表示是文件夹
- -表示普通文件,文本文件,二进制文件
- l软链接 相当于windows的快捷方式
android应用的私有目录
- 在data/data/应用包名 这是应用程序私有目录
- 应用可以读写自己的私有目录,不能读取其他应用的私有目录;读取别的私有目录,会发生文件无法读取的异常;
- /data/data/应用包名/files 用于存储一般文件,清除数据会有提示
- 获得目录方式 getFileDir();
- /data/data/应用包名/catche 存储缓存文件,清除缓存,直接删除
- 获得目录方式 getCacheDir();
利用getCacheDir()创建File对象
File file = new File(getCacheDir(), “cache.txt”);
Context 上下文
- Context 上下文:为Android 应用程序提供各种功能,资源和服务的环境.相当于一个小区周围的配套环境.
应用程序的日志
PID 进程
TID 线程
断言 assert 在调试中用;
private static final String TAG = "MainActivity"; //TAG一般写当前类名 Log.v(TAG, "verbose");//输出一般日志信息 Log.d(TAG, "debug");//输出debug信息 Log.i(TAG, "info");//输出info信息 Log.w(TAG, "warn"); Log.e(TAG, "error");
如何锁定横屏(显示的控件不发生界面旋转)呢? 在xml界面的screenOritation 设置一下
Android系统中为每个应用app指定一个uid,不同的应用程序分配的uid是不一样的.
Android中不同的app应用被视为其他用户;
- 没有相应的权限
r 有读权限
w 有写权限
x 有执行权限
chmod 664 private.txt 可以改变权限
安卓把SD卡读写专门做了一个组
安卓组id可以用来SD卡的存储~
Android系统中的文件存储
存储的分类
- RAM:内存或者主存,带电存储,掉电数据不能保存;
- ROM:(读的速度快,写的速度慢)内部存储空间;掉电了数据也能保存;(sharepreference,缓存都是属于这部分)
- SD卡: 可插拔的存储设备;相当于电脑的移动硬盘;
存储方式
- 内部存储空间存储
- 1./data/data/包名/shared_prefs/config.xml 用sharePreferences来获得
- 2./data/data/包名/files/ 用getFilesDir()来获得
- 3./data/data/包名/catche 用getCacheDir()来获得
SD卡存储
- 应用程序读写sdcard 需要申请相应权限
- 读sd卡可能需要申请权限 READ_EXTERNAL_STORAGE
- 写公用的sdcard 需要申请权限 WRITE_EXTERNAL_STORAGE
- sdcard路径获得方法
如何获得SD卡的大小?看下面的代码!
Environment.getExternalStorageDirectory() File file = new File(Environment.getExternalStorageDirectory(),"test.txt");* sdcard当前状态获得 Environment.getExternalStorageState() if(Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED){
sd卡空间大小
// 从settings应用中查找到sd卡空间大小获得方法 File path = Environment.getExternalStorageDirectory(); // 获得StatFs对象,可以获得sd卡大小信息 StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); // stat.getBlockCountLong() long totalBlocks = stat.getBlockCount(); long availableBlocks = stat.getAvailableBlocks(); Toast.makeText( this, "sd卡总空间大小:" + Formatter.formatFileSize(this, totalBlocks * blockSize), Toast.LENGTH_LONG).show();
**注意:读SD卡时可能需要添加权限;写SD卡一定要权限;
* 应用程序读写SD卡需要申请相应的权限
* 读SD卡可能需要申请权限
* 写公用的SD卡需要申请权限**
数据库
什么是数据库
- 数据库:存储数据的仓库,使用专门sql语句实现快速的增删改查.相当于电子化的文件柜;
常用的数据库管理 软件
- 数据库管理软件,相当于档案管理员;
- Oracle 甲骨文;商用及其广泛
- SQL Server 微软
- MySql 开源
- sqllit 嵌入式,轻量级数据库
数据库和一般文件存储对比
- 数据库采用数据表方式存储数据,通过索引方式管理,利用sql语句可以实现快速增删改查。
基本sql语句使用CRUD
* 创建数据表:create table 表名(列名 列的类型,...) CREATE TABLE userinfo (id integer primary key autoincrement,username varchar(20),password varchar(20));* 增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)* 增:insert into 表名 (要插入的列名,...) values (对应列数据,...) insert into userinfo (id,username,password) values (1,'zhangsan',"abc123")* 删:delete from 表名 where 条件1 or 条件2 and 条件3 delete from userinfo where id=2 or username='lisi' delete from userinfo 删除表中所有数据* 改:update 表名 set 修改的列名1=值1,修改的列名2=值2 where 条件 update userinfo set password='1234',username='lisi' where id=3* 查:select 要查出列名1,要查出列名2 from 表名 where 条件 select * from userinfo 查出所有数据 select * from userinfo where id=4 指定条件查询 select id,password from userinfo where id=4
- 例子:
--select * from data1 where id='1350010' --select * from data2 where id=381 select location from data2 where id=(select outkey from data1 where id='1350110')
更多相关文章
- Android系统配置数据库注释(settings.db)
- Android(安卓)给 app默认权限(不弹窗申请权限)
- Android(安卓)Studio & ADT 快捷键配置文件所在目录,自定义后可导
- 总目录
- Android(安卓)UI系列 - 布局 - 目录
- android 目录结构,adb环境变量配置
- Android(安卓)ROM的创建和烧录
- ubuntu NDK 的安装
- Android(安卓)编译NDK