Android學習筆記 文件存儲

分類:技術 時間:2016-10-25

IO與線程-文件存儲

Android手機中機身存儲空間ROM,按照功能進行劃分能分為以下三個區域

Paste_Image.png

  • 系統分區下是Android系統內置的APP等內容,對普通用戶不可寫;程序分區是我們自己安裝的APP;公共存儲空間用于儲存我們平時下載的內容比如電影,音樂
  • 普通應用開發無需涉及系統分區,我們先只關注程序分區

程序分區我們需要關注以下兩個區域

Paste_Image.png

  • APK內置數據。對應到data/app/應用包名
  • APK私有數據空間。對應到data/data/應用包名

對于儲存一些固定不變的使用頻率較高的內容,我們可以將其儲存在APK內置數據中,有以下兩個目錄可以選擇

Paste_Image.png

  • res/raw/與assets/下的內容在編譯時都會被編譯進APK文件中
  • 先來看res/raw/的讀取過程
    InputStream in = context.getResources().openRawResources(R.raw.文件名);
    res/raw/下的文件不能出現同名文件,否則出現編譯錯誤
    且該文件夾下不能有子目錄
  • assets/的讀取過程
    InputStream in = context.getAssets().open(quot;文件在assets下的目錄/文件名.文件格式quot;);
  • assets下的存儲優于raw下的存儲,其具備raw所有功能,且方便支持webView
    webView.loadUrl(quot;file:///android_assets/html/about.htmlquot;);

對于儲存應用比較隱私的內容,我們應該使用APP私有數據空間進行存儲,這個目錄下面,我們應注意cache和files文件,分別對應應用的緩存和應用內文件

Paste_Image.png

  • 先來關注files文件下的讀寫
    FileInputStream in = context.openFileInput(String fileName);//讀
    FileOutputStream out = context.openFileOutput(String fileName, int mode);//寫
    這里的mode有兩種取值Context.PRIVATE和Context.APPEND,分別對應覆蓋和追加
  • 再下來cache文件下的讀寫
    File chcheDir  = context.getCacheDir();
      File cacheFile = new File(CacheDir.getAbsolutePath()   quot;/fileNamequot;);
      FileOutPutStream out = null;
      out = new FileOutPutStream(cacheFile);
      String s = new String(quot;hello worldquot;);
      out.write(s.getBytes(quot;utf-8quot;));
      out.close//寫
      FileInPutStream in = new FileInPutStream(cacheFile);
      String ss = Util.getStringStream(in);//讀
    cache目錄下儲存有一個特性是當系統儲存空間不足時會被自動清除,需要注意

最后來看公共存儲空間

  • 首先使用公共存儲空間需要權限 WRITE_EXTERNAL_STORAGE
  • 因為使用公共目錄,可能被其他APP訪問
  • 公共存儲空間也有獨立的分類

    這里關注的是 應用擴展存儲目錄 (scared/Android/data/包名,其下同樣包含應用的cache和files)

    應用將數據存在這里,在APP被刪除時不會產生垃圾文件,且應用文件不會被媒體管理器掃描,相對隱秘

    Paste_Image.png

    獲取擴展存儲files目錄

    使用Context.getExternalFilesDir(String type)

    獲取擴展儲存cache目錄(這里的緩存同樣會在系統儲存空間不夠時被清空)

    使用Contetx.getExternalCacheDir()

  • 獲取公共存儲空間

    使用Enviroment.getExternalStorageDirectory()


Tags: 安卓開發

文章來源:http://www.jianshu.com/p/9860bc11e066


ads
ads

相關文章
ads

相關文章

ad