Android內部存儲

默認情況下,保存到內部存儲的文件是應用的私有文件,其他應用(和用戶)不能訪問這些文件。 當用戶卸載您的應用時,這些文件也會被移除。

寫入到內部存儲

寫入到\data\data\your package\files目錄

通過ContextWrapper.getFilesDir()

        String s = "hello internal";
        File file = new File(getFilesDir(), "internal_file.txt");
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(file);
            out.write(s.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (out == null)
                    return;
                out.flush();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

運行上述代碼后,可以通過Tools—>Android—>Android Device MonitorDDMSFile Explorer查看data\data\your package\files目錄下是否有internal_file文件,如果無法打開data目錄,請查看android device monitor cannot open data folder。如下圖:

storage_file_path.png

由于internal_file.txt文件pull不出來,我們可以使用adb shell cat命令查看文件內容,如下圖:

internal_file_content.png

通過ContextWrapper.openFileOutput()

        String s = "hello internal";
        FileOutputStream out = null;
        try {
            out = openFileOutput("internal_file.txt", MODE_PRIVATE);
            out.write(s.getBytes());
        } catch (IOException e) { 
            e.printStackTrace();
        } finally {
            try {
                if (out == null)
                    return;
                out.flush();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

運行之后得到的結果和第一種方式一樣,區別如下:

  • 通過第一種方式得到的internal_file.txt的權限如圖:
internal_file_permission1.png
  • 而這種方式得到的internal_file.txt的權限如圖:
internal_file_permission2.png

MODE_PRIVATE

將會創建文件(或替換具有相同名稱的文件),并將其設為應用的私有文件,默認模式。


internal_file_content.png

MODE_WORLD_READABLE

MODE_WORLD_WRITEABLE
從 Android N 開始,使用這些常量將會導致引發 SecurityException。這意味著,面向 Android N 和更高版本的應用無法按名稱共享私有文件,嘗試共享“file://”URI 將會導致引發FileUriExposedException。 如果您的應用需要與其他應用共享私有文件,則可以將 FileProviderFLAG_GRANT_READ_URI_PERMISSION 配合使用。

MODE_APPEND

如果文件已存在,然后將數據寫入現有文件的末尾


internal_file_content_append.png

寫入到\data\data\your package\cache目錄

通過ContextWrapper.getCacheDir()

與寫入到files目錄類似:


internal_cache_path.png

cache和files文件的區別

  • 當設備的內部存儲空間不足或用戶卸載您的應用時,Android 可能會刪除緩存文件以回收空間。
  • 應該始終自行維護緩存文件,使其占用的空間保持在合理的限制范圍內(例如 1 MB)
  • 點擊CLEAR DATA會清除data\data\your package目錄下的所有目錄以及文件;點擊CLEAR CACHE會清除data\data\your package\cache目錄下的文件
    setting_apps.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,315評論 25 708
  • ?Android開發中我們常常聽到這樣幾個概念,內存,內部存儲,外部存儲,很多人常常將這幾個概念搞混。?內存(Me...
    咊庭閱讀 7,006評論 1 8
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,556評論 2 45
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,933評論 18 139
  • 從易經的角度講,萬事萬物的屬性都可以通過五行來表達其特征。 例如一個人出生日期可以歸為八字,天干地支各有其五行屬性...
    四諦界閱讀 650評論 0 0