我目前正在一个模拟器上用一个测试应用程序运行JUnit测试,该模拟器正在运行我的目标应用程序并验证结果。在这些测试的运行时,我有一些特定的文件,我想保存到测试应用程序的内部持久存储中,如Android文档的这一部分所述。
文档的这一部分指出
Your app doesn't require any system permissions to read and write to files in these directories.
然而,每当我试图按照文档创建文件时,我发现我没有在该区域读取或写入文件的权限。
我尝试过以下方法。我已经在JUnit规则的after方法中运行了这些命令,这些命令在测试APK中执行,而不是在目标APK中执行。
首先,我尝试按照文档中的说明,使用
val f = File(context.filesDir, "tmp.txt")
然而,f.canRead()
和f.canWrite()
都返回false
,这表明我实际上没有读/写这个特定文件的权限,尽管我上面链接的Android文档中有说明。
另外,我尝试过不顾这些信号继续写数据,执行f.createNewFile()
时抛出"java.io.IOException: No such file or directory"
异常。此外,f.parentFile.mkdirs()
似乎也失败了,返回了false
。最后,我尝试构造一个FileOutputStream(f)
,它抛出一个java.io.FileNotFoundException
,原因是"android.system.ErrnoException: open failed: ENOENT (No such file or directory)"
。
我不太清楚为什么我在保存文件时会遇到这样的问题,尤其是当文档中说我不需要关心应用程序的权限时;然而,如果任何人遇到任何类似的问题或有任何建议,将不胜感激。谢谢!
编辑:
文档指出,持久的内部文件应该位于通过适当的context
对象上的filesDir
属性获得的目录中。因此,由于我正在执行插装测试,并希望将这些文件保存在测试APK中,因此我通过
val context = InstrumentationRegistry.getInstrumentation().context
,然后,我使用context.filesDir
属性来确定将文件放置在哪个目录下。
另外,我尝试通过f.createNewFile()
创建文件,也返回false
。
1条答案
按热度按时间wgmfuz8q1#
在yout AndroidManifest中添加这一行