android手机的内部存储
內(nèi)部存儲(chǔ):
在data/data/packagename中(一個(gè)app對(duì)應(yīng)一個(gè)packagename)
常見(jiàn)文件夾有cache ,code_cache ,files , databases , shared_prefs 和一個(gè)lib文件
?
files: 文件緩存目錄,一般存小的文件緩存,如果是圖片,不建議放這里,一般放到外置卡。
cache目錄: 存放一些其他緩存
databases: 存放數(shù)據(jù)庫(kù)
lib: 存放應(yīng)用的so目錄
shared_prefs: 存放應(yīng)用的SharedPreferences
?
常用方法:
1. Context.getFilesDir() ? 返回一個(gè)File對(duì)象,當(dāng)Log打印出file.getAbsolutePath()時(shí)看到的是:
/data/user/0/packagename/files ,
而user下的文件夾0就是data\data的一個(gè)鏈接名, 實(shí)際位置就是在 /data/data/packagename/files里
注意安裝app后files文件夾里若沒(méi)有任何東西時(shí)是不會(huì)看到這個(gè)文件夾的,而執(zhí)行以下代碼:
File f1 = getFilesDir(); Log.e("TAG","getFilesDir(): " + f1.getAbsolutePath()); try {File dir1 = new File(getFilesDir(),"dir1");if (!dir1.exists()){dir1.mkdir();}File f = new File(dir1, "test1.txt");FileOutputStream fos = new FileOutputStream(f);String txt = "Hello test1!";fos.write(txt.getBytes());fos.close(); }catch (Exception e){e.printStackTrace(); }結(jié)果會(huì)自動(dòng)在/data/data/packagename中先創(chuàng)建一個(gè)files文件夾,在files里再創(chuàng)建了一個(gè)dir1文件夾,dir1中有一個(gè)test1.txt
若不需要?jiǎng)?chuàng)建文件夾,安卓還為我們提供了一個(gè)簡(jiǎn)便方法,得到可直接在files中寫入文件的輸出流,執(zhí)行以下代碼:
String fileName = "test2.txt"; String txt = "hello test2"; FileOutputStream fos; try {fos = openFileOutput(fileName,MODE_PRIVATE);fos.write(txt.getBytes());fos.close(); }catch (Exception e){e.printStackTrace(); }Context.openFileOutput(String name, int mode)返回一個(gè)輸出流
Context.openFileInput(String name) 返回一個(gè)輸入流
此時(shí)目錄結(jié)構(gòu)如下:
?
2. getCacheDir() 和 getCodeCacheDir() 顯然分別返回 /data/data/packagename下cache和code_cache對(duì)應(yīng)的File對(duì)象
?
3.在包下創(chuàng)建目錄(與files,cache這些文件夾同級(jí))
File myFile = getDir("myfile",MODE_PRIVATE); if(!myFile.exists()){myFile.mkdir(); }結(jié)果目錄為:
app_myfile 就是自己創(chuàng)建的文件夾
?
總結(jié):
1). 對(duì)files:getFilesDir()
==? new File("/data/data/"+ context.getPackageName() + "/files")
(openFileOutput,openFileInput得到的是文件流)
?
2).對(duì)cache和code_cache
getCacheDir() 和 getCodeCacheDir()
== new File("/data/data/"+ context.getPackageName() + "/cache") 和 new File("/data/data/"+ context.getPackageName() + "/code_cache")
?
3).對(duì)根目錄
getDir(String name, int mode)
== new File("/data/data/"+ context.getPackageName() + "/" + name)
?
4) . 對(duì)shared_prefs
1.Context類中的getSharedPreferences(String name, int mode) 方法
SharedPreferences sp = getSharedPreferences("data",MODE_PRIVATE);2.Activity類中的getPreferences(int mode) 方法
用法同上,不用傳入sp的name是因?yàn)槭褂么朔椒ㄊ菚?huì)自動(dòng)將當(dāng)前活動(dòng)的類名作為sp的文件名
?
3.PreferenceManager類中的getDefaultSharedPreferences(Context context) 方法
這是一個(gè)靜態(tài)方法,接收一個(gè)Context參數(shù),并自動(dòng)使用應(yīng)用程序的包名作為前綴來(lái)命名sp文件
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的android手机的内部存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: crosswalk 初步使用
- 下一篇: 网站备案信息真实性核验单