Android文件系統入門知識
內外存儲的由來:因爲歷史原因,老版本的Android手機可用容量小, 加載外部存儲設備以便加大容量, 如sdcard. 後來隨着技術的不斷提高, 手機本身的容量逐漸加大, 但是這個分法一直保留了下來.
二者區別
-
內部存儲
不需要權限
其它APP不可訪問, 用戶也不能操作
卸載APP時會移除內部存儲數據
-
外部存儲
首先要確認可訪問性, 因爲外部存儲可卸載
其它APP可以訪問
需要權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
內部存儲簡單介紹
所在路徑: Android 6.0在/data/user/0/package_name/
其它版本也對應在/data/下的某個地方, 以包名作爲區分, 未root的文件管理中查看不了
使用:
在繼承自ContextWrapper中, 如Activity, Application
//得到文件對象
File file = getFilesDir();
String inPath = file.getAbsolutePath();
Log.d("test-file","getFileDir:"+ inPath);
//在inPath中寫入hello
FileOutputStream fileOutputStream = openFileOutput("hello.txt", MODE_PRIVATE);
fileOutputStream.write("hello".getBytes());
fileOutputStream.close();
外部存儲簡單介紹
通過android.os包中的Environment類
//判斷文件可用性
/* 可寫 */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* 可讀 */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
//得到外部存儲私有對象(File),會隨着APP的卸載而卸載
Environment.getExternalStorageDirectory();
//得到外部存儲公共對象, 文件不會隨着APP的卸載而卸載
//傳入的參數代表文件類型 如Environment.DIRECTORY_MUSIC 代表音樂
//DIRECTORY_RINGTONES 代表鈴音
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));
得到File對象後, 你就可以爲所欲爲