我们都知道Android系统内核就是个Linux、所以我们的文件系统与Linux也是基本一致的,最顶部的目录是 “/” 接下来就是 一些文件或者文件夹,如下图:
/
├── acct
│ └── uid
│ ├── cpuacct.stat
│ └── ...
├── cache
│ ├── backup
│ │ ├── cpuacct.stat
│ │ └── ...
│ ├── lost+found
│ │ └── ...
│ ├── cpuacct.stat
│ │ └── ...
│ └── recovery
│ └── ...
│
├── ...
├── storage
│ ├── emulated
│ │ ├── 0
│ │ │ ├── Alarms
│ │ │ ├── Android
│ │ │ ├── backups
│ │ │ ├── DCIM
│ │ │ └── ...
│ │ │
│ │ └── obb
│ │
│ └── self
│ └── primary
│ ├── Alarms
│ └── ...
├── system
│
/data/data/packageName/
/storage/emulated/0/
/*
* @param type The type of storage directory to return. Should be one of
* {@link #DIRECTORY_MUSIC}, {@link #DIRECTORY_PODCASTS},
* {@link #DIRECTORY_RINGTONES}, {@link #DIRECTORY_ALARMS},
* {@link #DIRECTORY_NOTIFICATIONS}, {@link #DIRECTORY_PICTURES},
* {@link #DIRECTORY_MOVIES}, {@link #DIRECTORY_DOWNLOADS},
* {@link #DIRECTORY_DCIM}, or {@link #DIRECTORY_DOCUMENTS}. May not be null.
* @return Returns the File path for the directory. Note that this directory
* may not yet exist, so you must make sure it exists before using
* it such as with {@link File#mkdirs File.mkdirs()}.
*/
public static File getExternalStoragePublicDirectory(String type) {
throwIfUserRequired();
return sCurrentUser.buildExternalStoragePublicDirs(type)[0];
}
/data/data/packageName/
目录,网上大部分都说是用getFilesDir()
然而我获取到的路径在上面已经给出了,完全不一样。那我们要怎么获取那个路径呢?答案当然是直接写喽(反正是固定的)…
/storage/emulated/0/Android/data/com.azhon.androiddir/cache
目录它是不需要声明权限的
对的 你没看错是不需要权限的下面我们来试下:public void writeToCache(View view) {
String externalCacheDir = getExternalCacheDir().getPath();
File file = new File(externalCacheDir, "test.txt");
try {
FileOutputStream stream = new FileOutputStream(file);
for (int i = 0; i < 66; i++) {
stream.write("Hello world!\n".getBytes());
}
stream.flush();
stream.close();
Toast.makeText(this, "写入成功!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
/data/data/packageName/
下了。/data/data/packageName/
目录下写入一个文件,也是不需要权限的。public void writeToData(View view) {
File dir = new File("/data/data/" + getPackageName() + "/files");
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir.getPath(), "test.txt");
try {
FileOutputStream stream = new FileOutputStream(file);
for (int i = 0; i < 66; i++) {
stream.write("Hello Android!\n".getBytes());
}
stream.flush();
stream.close();
Toast.makeText(this, "写入成功!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
getExternalCacheDir().getPath()
目录和context.getCacheDir()
下的所有文件/data/data/packageName/
目录下的所有文件,同时也会清空getExternalCacheDir().getPath()
目录下的所有文件public void clearCache(View view) {
File externalCacheDir = getExternalCacheDir();
deleteDirFile(externalCacheDir);
Toast.makeText(this, "清除缓存成功!", Toast.LENGTH_SHORT).show();
}
/**
* 删除指定目录下文件及目录
*/
public static void deleteDirFile(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (String child : children) {
deleteDirFile(new File(dir, child));
}
}
dir.delete();
}
而不是写个这样的清除缓存
public void clearCache(View view) {
try {
Thread.sleep(666);
} catch (InterruptedException e) {
e.printStackTrace();
}
Toast.makeText(this, "清除缓存成功!", Toast.LENGTH_SHORT).show();
}
}