橄榄球世界杯_1990世界杯阿根廷 - liuweiqing95511.com

橄榄球世界杯_1990世界杯阿根廷 - liuweiqing95511.com

Android——内部/外部存储

Home 2025-08-22 16:50:34 Android——内部/外部存储

Android——内部/外部存储

Android 内部存储 与宿主 App 的生命周期相同,应用卸载时,会被系统自动删除。宿主 App 可以直接访问,无需权限。其他应用无权访问。用户访问

  • admin 18世界杯德国
  • 2025-08-22 16:50:34

Android 内部存储

与宿主 App 的生命周期相同,应用卸载时,会被系统自动删除。宿主 App 可以直接访问,无需权限。其他应用无权访问。用户访问需 Root 权限。适合存储与应用直接相关,隐私性或敏感性高的数据。

主要API

getDataDir()

存放目录:/data/data/包名

getFilesDir()

存放目录:/data/data/包名/files

getDir(String name, int mode)

存放目录:/data/data/包名/指定的name名 (如果该目录不存在,系统会自动创建该目录)

mode

MODE_APPEND:即向文件尾写入数据MODE_PRIVATE:即仅打开文件可写入数据

String directory = getFilesDir().toString();

path = directory + File.separator + fileName;

FileUtil.saveText(path, sb.toString());

Android 外部存储

Android把外部存储分为两块区域,一块是所有应用均可访问的公共空间,另一块是只有应用自己才可访问的私有空间。

私有空间

与宿主 App 的生命周期相同,应用卸载时,会被系统自动删除。宿主 App 可以直接访问,无需权限。(备注:从 4.4 版本开始,宿主 App 可以直接读写外部存储空间中的应用私有目录, 4.4 版本之前,开发人员需在 Manifest 申请外部存储空间的文件读写权限。)其他 App 可以访问。(备注:自 Android 7.0 开始,系统对应用私有目录的访问权限进一步限制。其它App无法通过 file:// 这种形式的 Uri 直接读写该目录下的文件内容,需通过 FileProvider 访问。)用户可直接访问,无需权限。适合存储与应用直接相关,隐私性或敏感性都不高的数据。

主要API

getExternalFilesDir()

存放目录:/storage/emulated/0/Android/data/包名/files

getExternalCacheDir()

存放目录:/storage/emulated/0/Android/data/包名/cache

String fileName = System.currentTimeMillis() + ".txt";

String directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();

path = directory + File.separator + fileName;

FileUtil.saveText(path, sb.toString());

公共空间

与宿主 App 生命周期无关,应用卸载后,数据仍然保留。所有的App都需要申请 EXTERNAL_STORAGE 权限,Android 6.0 开始需申请动态权限。用户访问,无需权限。适合存储不敏感的数据,且希望与其他应用共享的数据。

主要API

Environment.getExternalStoragePublicDirectory(String type)

存放目录:/storage/emulated/0/指定的type

String directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();

权限

注: Android 10 开始,在 Manifest 增加了新属性:android:hasFragileUserData=“true”,如果这里的值为“true”,在卸载 App 的时候,在弹出的对话框里可以由用户勾选是否保留数据。如果勾选的话,那么“外部存储 - 应用私有目录”中数据就会保留,而不会被系统清理。但是不管这里是否勾选,内部存储私有目录里的数据都会被系统删除。

FileUtil

public class FileUtil {

// 把字符串保存到指定路径的文本文件

public static void saveText(String path, String txt) {

BufferedWriter os = null;

try {

os = new BufferedWriter(new FileWriter(path));

os.write(txt);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (os != null) {

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

// 从指定路径的文本文件中读取内容字符串

public static String openText(String path) {

BufferedReader is = null;

StringBuilder sb = new StringBuilder();

try {

is = new BufferedReader(new FileReader(path));

String line;

while ((line = is.readLine()) != null) {

sb.append(line);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (is != null) {

is.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return sb.toString();

}

}

案例代码

  • 哪些游戏克嫦娥
Copyright © 2088 橄榄球世界杯_1990世界杯阿根廷 - liuweiqing95511.com All Rights Reserved.
友情链接