Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android數據存儲_外部存儲

android數據存儲_外部存儲

編輯:關於Android編程

源碼下載(免下載積分):下載

外部存儲並不是一定可以訪問的,例如外部存儲掛載到電腦上是,或者是SD Card作為外部存儲,被移除是,因此在訪問外部存儲時,一定要保證外部存儲是可以獲得的。判斷外部存儲是否已經掛載到了手機上可以這樣判斷:

    //判斷外部存儲是否可以訪問,並且可以讀寫
    private boolean isExternalStorageWritable()
    {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

對於在外部存儲的存儲方式:
public files:文件可以被其他應用程序訪問,並且在卸載應用程序以後會被刪除
private files:卸載應用程序後,文件會被刪除,

  • public files

    創建並寫入數據:

    private void createPublicFile() {
        //1. 判斷是否外部存儲可以訪問
        if (isExternalStorageWritable()) {
            /*
             *2. 使用getExternalStoragePublicDirectory方法來創建一個文件路徑
             * getExternalStoragePublicDirectory()方法會在外部存儲中獲得恰當的文件目錄
             * 參數表示的是文件的類型,DIRECTORY_PICTURES,DIRECTORY_DOWNLOADS等
             */
            publicPath = new File(Environment.getExternalStoragePublicDirectory
                    (Environment.DIRECTORY_PICTURES), "myPictures");
            //3.創建文件
            publicFile = new File(publicPath,"1.png");          
            if (!publicPath.exists()) {
                //創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄
                if (!publicPath.mkdirs()) {
                    //這裡拋出異常
                    throw new RuntimeException("不能創建所需目錄");
                }   
            }
            //4. 向文件中寫入數據
            InputStream read = null;
            FileOutputStream write = null;
            try {
                //Open a data stream for reading a raw resource
                read = getResources().openRawResource(R.drawable.ic_launcher);
                write = new FileOutputStream(publicFile);
                byte[] data = new byte[read.available()];
                //讀取數據到data數組中
                read.read(data);
                write.write(data);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally
            {               
                try {
                    if (read != null) 
                        read.close();
                    if (write != null)
                        write.close();                  
                } catch (IOException e) {
    
                    e.printStackTrace();
                }               
            }
            //5. 告訴media scanner創建了新文件,目的為了使用戶能立刻可以訪問
            MediaScannerConnection.scanFile(this,  
                    new String[]{ publicFile.toString()}, null, 
                    new MediaScannerConnection.OnScanCompletedListener() {              
                        public void onScanCompleted(String publicPath, Uri uri) {
                            Log.e("public External Storeage", " Scanned "+publicPath+":");
                            Log.e("public External Storeage", " uri "+uri);
                            }
                    }
            );
        }
    }
    • private files

      其創建流程與public files的相同,只是在創建文件路徑時使用的是getExternalFilesDir()
      (這個是Context方法)方法

      對於文件的刪除,外部存儲直接調用myFile.delete(),而對於內部存儲的方式,就要調用
      context.deleteFile(fileName);

      對於在外部存儲中創建緩存文件,可以調用getExternalCacheDir()方法,

      權限:
      對於外部存儲應該添加相關的權限例如寫數據:

       

      但對於android 4.4如果把文件存儲為private files時不需要使用相關的權限

      參考資料: http://developer.android.com/training/basics/data-storage/files.html http://developer.android.com/guide/topics/data/data-storage.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved