Android中数据存储路径的问题
/storage
- /storage/usbhost1 (不可读)
- /storage/extsd (不可读)
- /storage/sdcard0
- /storage/emulated
- /storage/emulated/legacy
- /storage/emulated/0
- /storage/emulated/0/Music
- /storage/emulated/0/Alarms
- /storage/emulated/0/Pictures
- /storage/emulated/0/Movies
- /storage/emulated/0/Download
- /storage/emulated/0/DCIM
- /storage/emulated/0/串口.apk
- /storage/emulated/0/Log.docx
手机存储
手机分为内部存储和外部存储
- 1.内部存储
主要方法 | 路径 |
---|---|
Environment.getDataDirectory() | /data |
Environment.getDownloadCacheDirectory() | /cache |
Environment.getRootDirectory() | /system |
private void writeData() {
String filePath = null;
boolean hasSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
if (hasSDCard) {
filePath = Environment.getExternalStorageDirectory().toString() + File.separator + "hello.txt";
} else {
filePath = Environment.getDownloadCacheDirectory().toString() + File.separator + "hello.txt";
}
try {
File file = new File(filePath);
if (!file.exists()) {
File dir = new File(file.getParent());
dir.mkdirs();
file.createNewFile();
}
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write(str.getBytes());
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
-
Environment.getExternalStorageState()
用来查看SD卡的状态,只要返回的状态与
Environment.MEDIA_MOUNTED
的值相同,就代表当前SD卡的状态是可用的。boolean hasSDCard = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
-
-
Environment.getExternalStorageDirectory()
/storage/emulated/0
获取的是存储卡的外部第一层路径,也就是存储卡的根界面。
-
-
File.separator
分隔符,window系统中是\,linux系统中是/,为了使在不同的系统中都可以使用,
File.separator
就是解决这个问题的,在不同的系统中分隔符都是适用的。filePath = Environment.getExternalStorageDirectory().toString() + File.separator + "hello.txt";
-
-
Environment.getDownloadCacheDirectory()
下载缓存内容目录。
-
-
file.exists()
检查文件或目录是否存在。
如果指定的文件或目录存在则返回true,否则返回false。
-
file.getParent()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
-
mkdirs()
建立多级文件夹
-
-
mkdir()
只会建立一级文件夹
-
-
createNewFile()
创建一个不存在的文件
-