一、存儲的分類:內置存儲和外置存儲
Internal storage:在data/data/包名裏
External storage:用getExternalStorageDirectory()方法獲取目錄
獲取External存儲的權限
android:permission.WRITE_EXTERNAL_STORAGE
Internal storage
getFileDir():返回一個File,代表了app的internal目錄;
getCacheDir():返回一個File,代表了app的internal緩存目錄。
在內部存儲創建文件,並把內容保存在文件裏即存儲數據:
private void testFileDemo() {
File file = new File(getFilesDir(),"test.txt");
Log.i("MainActivity","getFileDir"+ getFilesDir().getAbsolutePath());
Log.i("MainActivity","file path"+ file.getAbsolutePath());
try {
boolean isSuccess = file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
與sharedPreferences的區別:
1、sharedPreferences由系統封裝,但是它不夠靈活,只能存String、boolean、int型數據;
2、自己創建很靈活,可以存很多數據、大批量的數據。
新建文件,並且寫入數據:
String string = "I'm tall";
try {
FileOutputStream fileOutputStream = openFileOutput("test2.txt", Context.MODE_PRIVATE);
try {
fileOutputStream.write(string.getBytes());
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
//check external storage state
String state = Environment.getExternalStorageState();
if(TextUtils.equals(state,Environment.MEDIA_MOUNTED)){}
持久化數據有幾種?
1、存到sharedPreferences,
2、存到文件裏
3、數據庫
4、網絡存儲
基本操作:
1、如何讀取應用本身目錄?
2、怎樣讀取文件?
3、如何寫入文件?
4、如何刪除文件?
如何操作文件(增刪改查)
讀取各目錄下的文件
1、操作外置存儲文件
public void testSDCard(){
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File("filePath");
}
2、操作assets目錄下的文件
android studio添加assets文件夾:
1、結構管理區域選擇“Project”;
2、新建”assets”文件夾:app->src->main,new Directory,”assets”
3、配置:項目文件夾根目錄下,xxx.iml文件裏(xxx爲項目名)添加如下代碼:
private void testAsserts() throws IOException {
/*第一種方法:直接讀路徑
* */
//webView加載asset中的文件內容
WebView webView = new WebView(this);
//把本地的網頁緩存在這
webView.loadUrl("file:///android_asset/test.html");
/*第二種方法:讀流
*/
try {
//open只能是文件不能是文件夾
InputStream inputStream = getResources().getAssets().open("test.html");
inputStream
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this,"文件讀取異常",Toast.LENGTH_SHORT).show();
}
//讀列表
String[] fileNames = getAssets().list("images/");
//讀圖片
InputStream inputStream = getResources().getAssets().open("images/me_one");
//將輸入流變成bitmap(圖片的位圖)
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(bitmap);
//讀音頻
AssetFileDescriptor assetFileDescriptor = getAssets().openFd("yesterday_once_more.pm3");
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.reset();
mediaPlayer.setDataSource(
assetFileDescriptor.getFileDescriptor(),
assetFileDescriptor.getStartOffset(),
assetFileDescriptor.getLength());
mediaPlayer.prepare();
mediaPlayer.start();
}
3、操作raw目錄下的文件、操作res目錄下的文件
public void testResFile(){
InputStream inputStream = getResources().openRawResource(R.raw.yesterday_once_more);
getResources().getColor(R.color.abc_background_cache_hint_selector_material_dark);
getResources().getString(R.string.abc_action_bar_home_description);
}
assets和raw裏的音頻文件:
相同點:都是將音頻文件打在包裏,不會有變動
不同點:assets裏是原封不動的,res原封不動時系統會放入資源id裏,可通過id訪問。