android手机的内部存储
內部存儲:
在data/data/packagename中(一個app對應一個packagename)
常見文件夾有cache ,code_cache ,files , databases , shared_prefs 和一個lib文件
?
files: 文件緩存目錄,一般存小的文件緩存,如果是圖片,不建議放這里,一般放到外置卡。
cache目錄: 存放一些其他緩存
databases: 存放數據庫
lib: 存放應用的so目錄
shared_prefs: 存放應用的SharedPreferences
?
常用方法:
1. Context.getFilesDir() ? 返回一個File對象,當Log打印出file.getAbsolutePath()時看到的是:
/data/user/0/packagename/files ,
而user下的文件夾0就是data\data的一個鏈接名, 實際位置就是在 /data/data/packagename/files里
注意安裝app后files文件夾里若沒有任何東西時是不會看到這個文件夾的,而執行以下代碼:
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(); }結果會自動在/data/data/packagename中先創建一個files文件夾,在files里再創建了一個dir1文件夾,dir1中有一個test1.txt
若不需要創建文件夾,安卓還為我們提供了一個簡便方法,得到可直接在files中寫入文件的輸出流,執行以下代碼:
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)返回一個輸出流
Context.openFileInput(String name) 返回一個輸入流
此時目錄結構如下:
?
2. getCacheDir() 和 getCodeCacheDir() 顯然分別返回 /data/data/packagename下cache和code_cache對應的File對象
?
3.在包下創建目錄(與files,cache這些文件夾同級)
File myFile = getDir("myfile",MODE_PRIVATE); if(!myFile.exists()){myFile.mkdir(); }結果目錄為:
app_myfile 就是自己創建的文件夾
?
總結:
1). 對files:getFilesDir()
==? new File("/data/data/"+ context.getPackageName() + "/files")
(openFileOutput,openFileInput得到的是文件流)
?
2).對cache和code_cache
getCacheDir() 和 getCodeCacheDir()
== new File("/data/data/"+ context.getPackageName() + "/cache") 和 new File("/data/data/"+ context.getPackageName() + "/code_cache")
?
3).對根目錄
getDir(String name, int mode)
== new File("/data/data/"+ context.getPackageName() + "/" + name)
?
4) . 對shared_prefs
1.Context類中的getSharedPreferences(String name, int mode) 方法
SharedPreferences sp = getSharedPreferences("data",MODE_PRIVATE);2.Activity類中的getPreferences(int mode) 方法
用法同上,不用傳入sp的name是因為使用此方法是會自動將當前活動的類名作為sp的文件名
?
3.PreferenceManager類中的getDefaultSharedPreferences(Context context) 方法
這是一個靜態方法,接收一個Context參數,并自動使用應用程序的包名作為前綴來命名sp文件
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的android手机的内部存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: crosswalk 初步使用
- 下一篇: 网站备案信息真实性核验单