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

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;
}

}

``

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容