为什么手机不显示安卓App内创建的保存文件,模拟器报错如何解决?
问题原因及解决办法
一、三星Galaxy S8找不到保存文件的原因
你调用openFileOutput()传入Context.MODE_PRIVATE参数时,文件是保存在应用的内部私有存储目录下,路径格式为/data/data/[你的应用包名]/files/,这个目录有访问权限限制:
- 未Root的设备上,第三方文件管理器、系统自带的文件浏览工具都无法访问该目录,只有你的应用自身可以读写
- 你可以通过Android Studio的「Device File Explorer」工具,进入对应路径查看保存的文件
二、现有代码的逻辑缺陷
你当前的异常捕获结构存在风险:如果第一次openFileOutput抛出异常导致fos为null,后续调用fos.write()会直接触发空指针异常,优化后的代码参考:
public void save(View v){ String FILENAME = "StoredData"; String Data = ed1.getText().toString(); // 自动关流的try-with-resources写法,更安全 try (FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE)) { fos.write(Data.getBytes()); Toast.makeText(this, "数据已保存到:" + getFilesDir() + "/" + FILENAME, Toast.LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "保存失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } }
如果你需要让文件在系统文件管理器中可见,需要将文件保存到公共外部存储,需要做以下修改:
- 在AndroidManifest.xml中添加存储权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - Android 6.0及以上系统需要动态申请存储权限,用户授权后才能写入公共存储
- 使用
Environment.getExternalStoragePublicDirectory()等公共路径替代内部私有路径
三、模拟器只读目录报错的解决办法
报错是因为Windows系统中Android Studio的工作目录权限不足,按以下步骤修复:
- 找到路径
C:\Users\Josh Gascoigne\.android\monitor-workspace\.metadata,右键点击文件夹选择「属性」,取消勾选「只读」,应用更改到该文件夹、子文件夹和所有文件 - 切换到属性的「安全」标签,给你当前登录的Windows用户添加「完全控制」权限
- 关闭占用该目录的杀毒软件、文件管理工具后重试
- 如果路径中的空格(你用户名里的空格转义成了路径里的%20)导致兼容性问题,可以修改Android Studio的配置路径:在Android Studio安装目录的
bin/idea.properties文件中,修改idea.config.path和idea.system.path到不含中文、空格的路径,例如C:\Android\studio-config
内容的提问来源于stack exchange,提问作者GAZZA
相关产品推荐
相关产品推荐

