防止经常要用的时候记不住在哪个文件夹,要再去一一百度很麻烦,一次性测完了整理放在这里。
注:测试时的Android版本是12,如果实际地址不同可以用下面的测试代码自行重新看一遍。
Api | 对应文件夹目录 | 说明 |
应用安装位置 | data/data/包名 | 只有debug的包才能点进去看内部文件 |
getExternalFilesDir() | /storage/emulated/0/Android/data/包名/files | 获取外部地址时一般来说都用这个,后面再加上文件夹将你自己要存的文件分类 |
getExternalFilesDirs() | /storage/emulated/0/Android/data/包名/files | 上面那个方法的复数版本,会返回所有符合要求的地址,demo里面两者返回相同 |
getExternalFilesDir(Environment.DIRECTORY_MUSIC) | /storage/emulated/0/Android/data/包名/files/music | 同上,入参还有很多能填的,具体看Environment类的对应常量 |
getExternalCacheDirs() | /storage/emulated/0/Android/data/包名/cache | |
getDataDir() | /data/user/0/包名 | 如果你的App要上应用市场,那么一般来说用这个,带external的方法都需要获取外部读写权限 |
getFilesDir() | /data/user/0/包名/files | 如果你的App要上应用市场,那么一般来说用这个,带external的方法都需要获取外部读写权限 |
代码(请随便整个测试按钮然后调用入口方法):
public class ContextFileUtils {
private static final String TAG = "FileUtils";
public static void printContextFile(Context context) {
if (context == null) {
Log.e(TAG, "printContextFile: null Context!!!");
return;
}
printFilesPath(context.getExternalFilesDirs(null), "getExternalFilesDirs");
printFilePath(context.getExternalFilesDir(null), "getExternalFilesDir");
printFilesPath(context.getExternalFilesDirs(Environment.DIRECTORY_MUSIC), "getExternalFilesDirs, DIRECTORY_MUSIC");
printFilesPath(context.getExternalFilesDirs(Environment.DIRECTORY_PICTURES), "getExternalFilesDirs, DIRECTORY_PICTURES");
printFilesPath(context.getExternalCacheDirs(), "getExternalCacheDirs");
printFilePath(context.getExternalCacheDir(), "getExternalCacheDir");
printFilePath(context.getDataDir(), "getDataDir");
printFilePath(context.getFilesDir(), "getFilesDir");
}
private static void printFilesPath(File[] files, String msg) {
if (files == null) {
return;
}
for (File file : files) {
printFilePath(file, msg);
}
}
private static void printFilePath(File file, String msg) {
if (file != null) {
Log.i(TAG, msg + ": " + file.getAbsolutePath());
}
}
}