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文件

猜你喜欢

转载自blog.csdn.net/Tz_AndHac/article/details/82050195