问题一,file.mkdirs()是如何完成父目录的逐级创建的呢?
public boolean mkdirs() {
return mkdirs(false);//当原先的父目录只要有一个存在,都返回false
}
指向mkdirs(boolean resultIfExists);
private boolean mkdirs(boolean resultIfExists) {
try {
// Try to create the directory directly.
mkdirErrno();
return true;
} catch (ErrnoException errnoException) {
if (errnoException.errno == ENOENT) {
// If the parent was missing, try to create it and then try again.
File parent = getParentFile();
return parent != null && parent.mkdirs(true) && mkdir();
} else if (errnoException.errno == EEXIST) {
return resultIfExists;
}
return false;
}
}
//以上方法调用 mkdirErrno();
private void mkdirErrno() throws ErrnoException {
// On Android, we don't want default permissions to allow global access.
Libcore.os.mkdir(path, S_IRWXU);
}