查看手机存储目录
AndroidStudio->View->Tool Windows->Device File Explorer
Android 文件存储可分为内部存储和外部存储
内部存储(其他应用不可访问)
在目录/data/data/your_package_name/下的文件都属于内部存储
系统的api
方法 | 路径 | 含义 |
Environment.getDataDirectory() | /data | 内部存储的根路径 |
getFilesDir() | /data/data/your_package_name/files | 内部存储中的files路径 |
getCacheDir() | /data/data/your_package_name/cache | 内部存储中的cache路径 |
getDir(“myFile”, MODE_PRIVATE) | /data/data/your_package_name/app_myFile | 内部存储中的自定义路径 |
- getCacheDir(),返回的File对象,对cache目录的操作和file操作一样,只是cache不能保证永久存储而已。
外部存储(其他应用可访问)
在目录/storage/下的文件都属于外部存储
外部存储可分为外部私有存储,和公共存储。
私有存储
在目录/storage/emulated/0/Android/data/your_package_name/属于外部存储的私有存储
系统api
方法 | 路径 | 含义 |
getExternalFilesDir(“”) | /storage/emulated/0/Android/data/your_package_name/files | 私有存储中的files路径 |
getExternalCacheDir() | /storage/emulated/0/Android/data/your_package_name/cache | 私有存储中的cache路径 |
公共存储
在目录/storage/emulated/0/属于外部存储的公共存储(除/Android目录外)
系统api
方法 | 路径 | 含义 |
Environment.getExternalStorageDirectory() | /storage/emulated/0/ | 公共存储的根路径 |
Environment.getExternalStoragePublicDirectory(“”) | /storage/emulated/0/ | 公共存储的根路径 |
清除缓存与清除数据
清除缓存指的是程序运行时生成的编译文件以及其他的临时数据等。
清除数据指的是存储在/data和/storage中的数据
Storage与mnt
不用系统版本叫的名称不一样,实际都是外部存储
申请权限
READ_EXTERNAL_STORAGE , WRITE_EXTERNAL_STORAGE
内部存储不需要权限
私有存储 api < 19 需要权限
api >= 19不需要权限
公共存储 需要权限
api >= 23
读写权限均为危险权限,需要动态申请权限
文件操作
查看剩余空间和产出文件
File.getFreeSpace()
File.delete()
Context.deleteFile(String name) 删除内部存储的文件
/**
* 文件夹创建
*/
private void FolderCreate() {
//mkdirs()可以建立多级文件夹, mkdir()只会建立一级的文件夹
File dirFirstFolder = new File(File_PATH);
if (!dirFirstFolder.exists()) {
dirFirstFolder.mkdirs();
}
}
/**
* 文件创建
*/
private void FileCreate() {
File file = new File(FILE_NAME);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 文件的写入
*/
private void FileWrite() {
File file = new File(FILE_NAME);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
FileOutputStream fos = new FileOutputStream(file);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
bw.write(System.currentTimeMillis() + "你好啊");
bw.flush();
bw.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 文件的读取
*/
private void FileRead() {
try {
File file = new File(FILE_NAME);
BufferedReader br = new BufferedReader(new FileReader(file));
String readline = "";
StringBuffer sb = new StringBuffer();
while ((readline = br.readLine()) != null) {
System.out.println("readline:" + readline);
sb.append(readline);
}
br.close();
System.out.println("读取成功:" + sb.toString());
Toast.makeText(this, sb, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}