android文件数据库相关

本文详细介绍了Android设备上的文件系统组织结构,包括系统目录下的各子目录功能与存储内容,如应用程序、配置文件、字体文件等,并阐述了不同目录下文件的权限管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、文件访问

     android文件系统(Linux操作系统的文件系统)

     1、文件目录分析

         system---系统目录

 

                     1.1 \system\app---这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中

                            \system\app\AlarmClock.apk 闹钟

                            \system\app\Browser.apk 浏览器

                            \system\app\Bugreport.apk Bug报告

                            \system\app\Calculator.apk 计算器

                            \system\app\Calendar.apk 日历

                            \system\app\CalendarProvider.apk 日历提供

                            \system\app\Camera.apk 照相机

                            \system\app\DownloadProvider.apk 下载提供

                            \system\app\Email.apk 电子邮件客户端

                            \system\app\Launcher.apk 启动加载器

                            \system\app\Maps.apk 电子地图

                            …….

                     1.2\system\bin---这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件

                            \system\bin\app_process 系统进程

                            \system\bin\dalvikvm Dalvik虚拟机宿主

                            \system\bin\dbus-daemon 系统BUS总线监控

                            \system\bin\debuggerd调试器

                            \system\bin\mountd 存储挂载器

                            \system\bin\netcfg网络设置

                            \system\bin\playmp3 MP3播放器

                            \system\bin\pm 包管理器

                            \system\bin\servicemanager 服务管理器

                            …….

                     1.3\system\etc---从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置

                            \system\etc\apns-conf.xml APN接入点配置文件

                            \system\etc\AudioFilter.csv 音频过滤器配置文件

                            \system\etc\AudioPara4.csv

                            \system\etc\bookmarks.xml 书签数据库

                            \system\etc\dbus.conf 总线监视配置文件

                            \system\etc\dhcpcd

                            \system\etc\event-log-tags

                            \system\etc\favorites.xml 收藏夹

                            \system\etc\firmware 固件信息

                            \system\etc\gps.conf GPS设置文件

                            \system\etc\hcid.conf  内核HCID配置文件

                            \system\etc\hosts 网络DNS缓存

                            \system\etc\init.goldfish.sh

                            \system\etc\location 定位相关

                            \system\etc\mountd.conf 存储挂载配置文件

                            \system\etc\NOTICE.html 提示网页

                            \system\etc\permissions.xml 权限许可

                            …….

                     1.4\system\fonts ---字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库

                            \system\fonts\DroidSans-Bold.ttf

                            \system\fonts\DroidSans.ttf

                            \system\fonts\DroidSansFallback.ttf 文件大小

                            \system\fonts\DroidSansMono.ttf

                            \system\fonts\DroidSerif-Bold.ttf

                            \system\fonts\DroidSerif-BoldItalic.ttf

                            \system\fonts\DroidSerif-Italic.ttf

                            \system\fonts\DroidSerif-Regular.ttf

                            …….

                     1.5\system\framework---framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。

 

                     1.6 \system\lib---存放的主要是系统底层库,如平台运行时库

                            \system\lib\libandroid_runtime.so Android运行时库

                            \system\lib\libandroid_servers.so 系统服务组件

                            \system\lib\libaudio.so 音频处理

                            \system\lib\libaudioeq.so EQ均衡器

                            \system\lib\libaudioflinger.so 音频过滤器

                            \system\lib\libbluetooth.so 蓝牙组件

                            ……

 

                     1.7\system\media---铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音

                            \system\media\audio\alarms 闹铃音

                            \system\media\audio\notifications 提示音

                            \system\media\audio\ringtones 铃声

                            \system\media\audio\ui 界面操作事件音

 

                     1.8\system\sounds---默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件

 

                     1.9 \system\usr---用户文件夹,包含共享、键盘布局、时间区域文件等

                     1.10 \system\xbin---常用开发工具,比如 tcpdump/sqlite3 等

 

 

         data---应用及其数据(/data/data/应用的包名下面存储的是该应用的所有数据)该目录是属于内部存储!(买手机几个重要参数:屏幕、cup、ram、ROM(16g/32g/64g...))

                     1.1 /data/app 存放用户安装的软件

                     1.2 /data/data 存放所有软件(包括/system/app 和 /data/app 和 /mnt/asec中装的软件)的一些lib和xml文件等数据信息

                     1.3 /data/dalvik-cache 存放程序的缓存文件,这里的文件都是可以删除的

                     …….

 

 

         mnt---外部存储(SD卡/有的手机将SD卡已经绑定内置了)

 

       2、如果要缓存数据或者保存文件等应该如何选择?

              如果是缓存很小的数据可以缓存在内部存储也可以缓存到外部存储,尽量所有的缓存都缓存到外部存储里面。

data目录下面什么时候以及存的什么数据?应用配置数据(一般使用sharedPreference)(用户习惯—字体、是否自动登录、夜间模式等等)

 

       3、传统的java文件IO访问

 

      4、Android自带的API访问

 

      5、三层架构(MVC)

           M---model---对应android数据层

          V---View---对应android视图层

         C---ViewController---对应android activity

 

      6、单元测试

 

      7、文件权限(android mode理解)

           linux/unix 的档案调用权限分为三级 : 档案拥有者、群组、其他

           "-"代表文件;"d"代表文件夹(directory)

           r--read读权限;

           w--write写权限;

           x--execute可执行权限。

          

 

           d rwx rwx --x

          111 111 001

          7    7   1    

 

         四个部分:

                 d

                 -wx 创建该文件的所有者的权限(应用自身)

                      不可读;可写;可执行

                 rwx 所有者所在的同组所拥有的权限

                 --x 除了所有者和同组的其他进程的权限(其他的应用)

 

 

         如何修改文件的权限呢?(需要root)

           Linux命令修改:chmod 777

                 1)adb shell进入手机命令操作

                 2)找到要修改的目录

                 3)chmod 777 xxxfile

 

           用程序来执行Linux命令;

 

      8、外部存储(SD卡)

           1)可以插入sdcard

           2)不可插sdcrad---内置的外部存储

 

           思考:当一个手机有两个外置存储,我们如何判断哪一个才是默认的sd卡?(0内置,1内置)

           Environment类---环境

           Environment.getExternalStorageState()

 

           写sdcard权限

<uses-permission android:name=android.permission.WRITE_EXTERNAL_STORAGE/>

           sdcard权限

 

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

          

             

 

二、SharedPreferences共享首选项

用处:一般用来存储应用的配置信息。(例如:是否开启夜间模式、是否已登陆、是否记住密码等等)

 

三、Xml解析和序列化

     xml作用?---保存数据的一种方式

     xml解析有哪些方式?---dom、sax、pull

     这三种解析的有缺点是什么?

     dom:工厂模式,需要一次性的全部加载到我们的内存当中,非常浪费内存。

     sax:事件模型,不需要一次性的加载到我们的内存当中,当我们读取某一块内容的时候才会加载到内存当中。但是,一旦开始解析,就无法停止下来,知道解析完为止才回停止。

     pull:事件模型,sax升级版,当解析到某一块的时候,可以直接停止解析。

 

     WebService网络访问:传和返回的数据大部分都是xml文件

 

 

四、Sqlite数据库(框架设计---Orm框架:用java反射机制+泛型+xml动态配置对象)---ormlite数据库

1、sqlite数据库---android

     sqlite数据库:开源的。---轻量级(1、自身很轻 2、运行耗费内存比较小   3、使用起来非常方便)

     杀鸡也用牛刀乎?

2、sqlite数据库基本操作---crud  增删查改

     sqLiteDatabase.execSQL(sql语句)

 

3、SqliteOpenHelper来帮助我们管理数据库

     1)onCreate方法负责创建数据库表

     2)onUpgrade方法负责升级数据库

     3)onDwongrade方法负责降级数据库(其实就是数据库还原)

 

4、面向对象的数据库。(Oracle数据库就是面向对象的数据库,而且现在升级为面向网格数据库)

     Android自带的API来操作数据库—crud



import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import android.content.Context;
import android.util.Log;

public class FileUtils {
	/**
	 * 1、通过java api实现文件的写 2、通过java api实现文件的读 3、通过android api实现文件的写 4、通过android
	 * api实现文件的读
	 * 
	 * @throws Exception
	 */

	/**
	 * 1、通过java api实现文件的写
	 * 
	 * @param str
	 * @throws Exception
	 */
	public static void javaAPISaveContent(String str) throws Exception {
		File file = new File("/data/data/com.tz.file/haha.txt");
		if (!file.exists()) {
			file.createNewFile();
		}
		FileOutputStream outputStream = new FileOutputStream(file);
		outputStream.write(str.getBytes());
		outputStream.close();
	}

	/**
	 * 1、通过java api实现文件的读
	 * 
	 * @param str
	 * @throws Exception
	 */
	public static String javaApiReadContent() throws Exception {
		File file = new File("/data/data/com.tz.file/haha.txt");
		if (!file.exists()) {
			return null;
		}
		FileInputStream inputStream = new FileInputStream(file);
		int len = 0;
		byte[] buffer = new byte[1024];
		// StringBuffer
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		while ((len = inputStream.read(buffer)) != -1) {
			arrayOutputStream.write(buffer, 0, len);
		}
		inputStream.close();
		return arrayOutputStream.toString();
	}

	/**
	 * 1、通过java api实现文件的写
	 * 
	 * Context.MODE_PRIVATE -rw-rw---- Context.MODE_WORLD_READABLE -rw-rw--r-
	 * Context.MODE_WORLD_WRITEABLE -rw-rw--w- Context.MODE_APPEND -rw-rw----
	 * 
	 * 
	 * 
	 * 思考:MODE_WORLD_READABLE,MODE_WORLD_WRITEABLE保存文件是怎么保存的?
	 * MODE_WORLD_READABLE
	 * 、MODE_WORLD_WRITEABLE、Context.MODE_PRIVATE(当保存的时候如果存在,那么久替换内容,如果不存在那么久创建)
	 * 
	 * 
	 * -rw-rw----分为四个部分
	 * 
	 * 第一个部分: - 第二个部分: rw- 第三个部分: rw- 第四个部分: --- 提供给外部的app访问
	 * 
	 * "-"代表文件;"d"代表文件夹(directory) "r"代表读的权限(read) "w"代表写的权限(write) "x"代表可执行
	 * 
	 * "-"代表二进制数字0 "d"代表二进制数字1
	 * 
	 * - r w - r w - --- 0 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 chmod 777
	 * 
	 * 
	 * 
	 * 
	 * @param str
	 * @throws Exception
	 */
	@SuppressWarnings("deprecation")
	public static void androidAPISaveContent(Context context, String str)
			throws Exception {
		FileOutputStream openFileOutput = context.openFileOutput("kk.txt",
				Context.MODE_PRIVATE);
		openFileOutput.write(str.getBytes());
		openFileOutput.close();
	}

	/**
	 * 修改文件权限
	 * 
	 * @param str
	 * @throws Exception
	 */
	public static void chmod(Context context) throws Exception {
		File file = new File("/data/data/" + context.getPackageName()
				+ "/haha.txt");
		if (!file.exists()) {
			return;
		}
		Process process = Runtime.getRuntime().exec("chmod 777 " + file);
		int waitFor = process.waitFor();
		if (waitFor == 0) {
			Log.i("main", "修改权限成功!");
		} else {
			Log.i("main", "修改权限失败!");
		}
	}

}

整理自教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值