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卡已經綁定內置了)
shell adb shell 命令,可以操作模擬器,操作手機系統目錄。
exit 退出adb shell
2、如果要緩存數據或者保存文件等應該如何選擇?
如果是緩存很小的數據可以緩存在內部存儲也可以緩存到外部存儲,盡量所有的緩存都緩存到外部存儲里面。
data目錄下面什么時候以及存的什么數據?應用配置數據(一般使用sharedPreference)(用戶習慣—字體、是否自動登錄、夜間模式等等)
3、傳統的java文件IO訪問
4、Android自帶的API訪問
5、三層架構(MVC)
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命令;
看下代碼
``
package com.tz.dream_11_2_file.utils;
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.dream_11_2_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.dream_11_2_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、通過android 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", "修改權限失敗!");
}
}
/**
* 1、通過java api實現文件的讀
*
* @param str
* @throws Exception
*/
public static String androidApiReadContent() throws Exception {
return null;
}
}
``