android之File,Saving State,Preferences(二)

靜態文件做爲資源:

直接看代碼: java

Resources myResources = getResources(); 
InputStream myFile = myResources.openRawResource(R.raw.myfilename);

raw resource就是所謂的原生資源,存放在res/raw中,存放一些要預先存在的原生音頻,文件之類的。像xml資源,R.raw.文件名。

 

文件管理的工具

不少文件操做的類仍是在java.io.File包中,Android也提供了一些指定的工具方法去管理文件,如: android

1.deleteFile 使你可以移除被當前APP所建立的文件。 windows

2.fileList 返回一個包含全部文件的字符串數組。 數組

這些方法對於清理臨時文件將很是有用,若是你的App奔潰了,或者不可預知的被殺。 緩存

 

使用特定的App文件夾去存儲文件

大多APP都會考慮的事兒,就是相對於APP建立的文件,或者下載的文件應該存放在哪兒? 安全

有2種方式去存儲:內部或者外部。 app

注意:很是重要的一點要注意的是,存儲在外部介質的文件,好比SD卡,是沒有安全保障的,任何其它的App能夠修改或者刪除它。還有就是:文件存放在外部介質並不是全部時候都有用,好比SD卡被拔出等。 eclipse

安卓提供2個一致的方法,經過App Context,getDir和getExternalFilesDir,都將返回一個包含路徑的文件對象,前者是內部App存儲目錄,後者則是外部。 ide

注意:但存放在這些文件夾或者子文件夾下的文件,一旦APP卸載,都會被刪除。getExternalFilesDir是API level 8(Android 2.2)引入的。若是想支持更早的版本,你能夠調用Environment.getExternalStorageDirectory返回一個外部存儲的根路徑。 工具

getDir(String name, int mode)   name 就當作是子路徑名 mode 有 MODE_PRIVATE,MODE_WORLD_READABLE,MODE_WORLD_WRITABLE

getExternalFilesDir(String type)  type有Environment.DIRECTORY_XXX

注意:這2個方法所涉及的文件與APP共存,若APP被卸載,則存放在這些文件夾或者子文件夾下的文件也會被刪除。

 

建立私有的應用程序文件

安卓提供openFileInput和openFileOutput方法去簡化讀寫存放在應用程序沙盒中的文件。

String FILE_NAME = 「tempfile.tmp」;

// 建立一個相對私有與當前應用程序的輸出文件流 
FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE); 
// 建立一個輸入文件流 
FileInputStream fis = openFileInput(FILE_NAME);

 

若openFileOutput這方法中的文件不存在,則安卓會默認幫你建立一個。此輸出文件流默認行爲是覆蓋寫的模式,若是你想追加寫入則指定模式爲Context.MODE_APPEND.

默認的,openFileOutput方法建立的文件時相對私有與當前的應用程序,其它應用程序是沒法訪問的。標準的方式在APP之間共享文件是去建立一個Content Provider. 其它的,你也能夠指定模式爲Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITABLE.這2種模式下的文件時能夠被其它應用程序訪問的。

使用Context.MODE_WORLD_WRITABLE模式:

String OUTPUT_FILE = 「publicCopy.txt」; 
FileOutputStream fos = openFileOutput(OUTPUT_FILE, Context.MODE_WORLD_WRITEABLE);

那麼如何獲取到這些文件的路徑呢?

答:

File file = getFilesDir(); 
Log.d(「OUTPUT_PATH_」, file.getAbsolutePath());

使用應用程序緩存文件區

安卓一樣提供了2種,一個是受管理的內部緩存和一個不受管理的外部緩存。分別經過調用getCacheDir和getExternalCacheDir。一樣,當應用程序被卸載的時候,存儲在這些位置的文件也要被刪除。還有,存放在內部緩存文件夾的,當系統存儲空間不夠的時候也會被刪除。可是存放在外部緩存系統不予理會。

 

存儲共有的可讀文件

安卓2.2(API level 8)包含了一個方便的方法,Environment.getExternalStoragePublicDirectory。

Environment.getExternalStoragePublicDirectory(String type) type有Environment.DIRECTORY_XXX

例子:

String FILE_NAME = 「MyMusic.mp3」;

File path = Environment.getExternalStoragePublicDirectory( 
              Environment.DIRECTORY_MUSIC);

File file = new File(path, FILE_NAME);

try { 
  path.mkdirs(); 
  [... Write Files ...] 
} catch (IOException e) { 
  Log.d(TAG, 「Error writing 「 + FILE_NAME, e); 
}

注意:getExternalStoragePublicDirectory方法可能返回的目錄若不存在的,你須要檢驗。上述代碼已經展現了。
相關文章
相關標籤/搜索