文件系統-Android-存儲

本文沒有多餘的廢話

內部存儲

作用

保存應用私有文件

可見性

本應用可見,其他應用無法訪問

生命週期

應用卸載時被刪除

權限

不需要任何用戶權限

代碼實現

  1. IO流
    //文件存儲位置 data/data/[packagename]/files/
    //手機設置-應用管理-刪除應用數據 該操作會刪除此類文件(即刪除files文件夾)
    //上述操作同樣會刪除data/data/[packagename]/下database,shared_prefs,cache等文件夾
    try{
        FileOutputStream output = context.openFileOutput("inner.txt", Context.MODE_PRIVATE);
        utput.write("vbb".getBytes());
        output.flush();
    }catch(FileNotFoundException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }finally{
        if(output != null){
            output.close();
        }
    }
  1. 靜態資源 res/raw 文件夾下數據
    InputStream fis=null;
    try {
        fis=getResources().openRawResource(R.raw.[rawfileName]);
        BufferedReader bf=new BufferedReader(new InputStreamReader(fis));
        StringBuilder builder=new StringBuilder();
        String line=null;
        while((line=bf.readLine())!=null){
            builder.append(line);
        }
        Log.i(TAG,"已讀取Raw數據:"+builder.toString());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {//關閉資源
        if(fis!=null){
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  1. 緩存數據
    //文件存儲位置 data/data/[packagename]/cache/
    //手機設置-應用管理-清除應用緩存 該操作會刪除此類文件(即刪除cache文件夾)
    
    File cacheDir = context.getCacheDir();
    mTvFile.append("1. context.getCacheDir() = "+cacheDir.getAbsolutePath());
    mTvFile.append("\n");

    File cache = new File(cacheDir.getAbsolutePath() + File.separator + "cache.txt");
    if (!cache.exists()){
        cache.createNewFile();
        mTvFile.append("1.1 context.getCacheDir() = "+cache.getAbsolutePath());
        mTvFile.append("\n");
    }else {
        mTvFile.append("1.1 context.getCacheDir() = "+cache.getAbsolutePath());
        mTvFile.append("\n");
    }

注意

  1. 應用的私有緩存文件不應該過大。如果內存存儲空間不足,系統可能會刪除這些緩存文件。

外部存儲

概念

外部存儲是相對於內部存儲的概念。

作用

保存全局範圍的可讀取的文件。

可見性

設備中任何應用訪問,也可以被用戶查看,修改

生命週期

  1. 私有文件 應用卸載時會被刪除
  2. 公共文件 應用卸載時不會被刪除,直到用戶手動刪除

權限

需要申請權限。READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE。

涉及Android6.0運行時權限。

代碼實現

公共文件存儲
  1. 外部存儲可用性檢查
    //Environment的靜態字符串常量共 10 種
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
        Log.d("environment-state","外部存儲可用");
    }else {
        Log.d("environment-state","外部存儲不可用");
    }
  1. 公共目錄
    //外部存儲根目錄
    //位置 /storage/emulated/0
    File externalStorageDirectory = Environment.getExternalStorageDirectory();
    
    //Download 下載目錄
    //位置 /storage/emulated/0/Download
    File externalStoragePublicDirectoryDownloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    
    //Music 音樂目錄
    //位置 /storage/emulated/0/Music
    File externalStoragePublicDirectoryDownloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
    
    //DCIM 圖片目錄
    //位置 /storage/emulated/0/DCIM
    File externalStoragePublicDirectoryDownloads = Environment.getExternalStoragePublicDirectory(Environment.DCIM);
    
    //··· 等等
  1. 私有目錄

媒體掃描器不會掃描這些目錄,並且應用卸載時這些目錄會被刪除

    //應用外部緩存目錄
    //位置 /storage/emulated/0/Android/data/[pacagename]/cache/
    File externalCacheDir = context.getExternalCacheDir();
    
    //注意 外部存儲可能同時包含內置存儲器和SD卡兩個存儲空間,因此在Android 4.4(API 19)及以上還可以通過Context的getExternalCacheDirs方法訪問這兩個存儲空間。
    //第一個數組對象 爲外部主存儲器器的緩存目錄即context.getExternalCacheDir()的返回值
    //第二個數組對象 爲sd卡的緩存目錄
    File[] externalCacheDirs = context.getExternalCacheDirs();
    
    
    //應用外部文件目錄
    //Download 下載目錄
    //位置 /storage/emulated/0/Android/data/[pacagename]/files/Download/
    File externalFilesDir = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
    
    //Music 音樂目錄
    //位置 /storage/emulated/0/Android/data/[pacagename]/files/Music/
    File externalFilesDir = context.getExternalFilesDir(Environment.MUSIC);
    
    //··· 等等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章