Android如何写入TXT文件到公共存储,卸载应用后文件不被删除
前置权限配置(解决你报错的Permission DENIED问题)
因为你是个人自用无需上架,直接申请最高等级的存储权限即可:
- 在
AndroidManifest.xml中添加权限声明:
<!-- 适配Android 11以下版本 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 适配Android 11及以上版本 --> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- 代码中动态申请权限:
- Android 6.0-Android 10:动态申请
WRITE_EXTERNAL_STORAGE权限,用户授权后即可操作 - Android 11及以上:跳转系统设置页让用户开启「所有文件访问权限」,跳转代码示例:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (!Environment.isExternalStorageManager()) { Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(Uri.parse("package:" + getPackageName())); startActivity(intent); } }
问题1解答
getExternalFilesDir()返回的路径是/storage/emulated/0/Android/data/你的应用包名/files/,卸载应用时该目录会被系统删除,完全不符合你的需求,不要用。- 要获取公共存储下的固定专属目录,最简单的方式是先获取系统公共Documents目录,再拼接你自定义的文件夹名,即便
Environment.getExternalStoragePublicDirectory被标记废弃,在所有Android版本上都可以正常运行,无需担心可用性。 - 示例路径获取代码:
// 最终得到的路径就是 /storage/emulated/0/Documents/myapp File targetDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "myapp"); // 如果你要存在根目录,直接写下面这行即可 // File targetDir = new File(Environment.getExternalStorageDirectory(), "myapp");
问题2解答
完整的写文件代码如下,你只需要传入要写入的String内容即可:
public void writeToPublicFile(String content) { // 1. 创建目标目录 File targetDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "myapp"); if (!targetDir.exists()) { targetDir.mkdirs(); } // 2. 指定目标文件,文件名固定为output.txt,可自行修改 File targetFile = new File(targetDir, "output.txt"); // 3. 写入内容 try { FileWriter writer = new FileWriter(targetFile); writer.write(content); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } }
该代码生成的文件位于公共Documents下的myapp目录,既可以通过手机文件管理器、USB连接电脑访问,卸载应用时也不会被系统删除,完全符合你的要求。
内容的提问来源于stack exchange,提问作者SebasSBM
相关产品推荐
相关产品推荐

