以下内容Android 4.4及以后适用。
每个App有自己的Internal storage。
路径为/data/data/com.example.fredwang.fredtest/
com.example.fredwang.fredtest 为App的package。
使用此路径不需要任何权限。
该目录下有三个子目录:
以下代码可以直接在Internal Storage中写入文件。
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
以上代码直接将字符写入到hello_file文件中,文件保存在
/data/data/<>/files/
获得文件路径的API如下
String cacheDir = this.getCacheDir().toString();
String fileDir = this.getFilesDir().toString();
Log.d(TAG, " cacheDir: " + cacheDir + "\n fileDir: " + fileDir);
cacheDir: /data/user/0/com.example.fredwang.fredtest/cache
fileDir: /data/user/0/com.example.fredwang.fredtest/files
/data/user/0/com.example.fredwang.fredtest/ 这个目录等同于
/data/data/com.example.fredwang.fredtest/
除了Internal Storage之外,External Storage大多数情况都需要权限。
保存在公共的其他App也可以访问的目录下:
String publicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
Log.d(TAG, " publicDir: " + publicDir);
publicDir: /storage/emulated/0/Pictures
保存在其他App不可以访问的私有目录之下,需要注意的是,此目录不需要权限。
String externalFileDir = this.getExternalFilesDir(null).toString();
String exterCacheDir = this.getExternalCacheDir().toString();
Log.d(TAG, " externalFileDir: " + externalFileDir + "\n exterCacheDir: " + exterCacheDir);
externalFileDir: /storage/emulated/0/Android/data/com.example.fredwang.fredtest/files
exterCacheDir: /storage/emulated/0/Android/data/com.example.fredwang.fredtest/cache