【问题标题】:Android Studio load file from resourcesAndroid Studio 从资源加载文件
【发布时间】:2014-04-19 17:17:07
【问题描述】:

我正在尝试从资源中加载 .json 文件,以便在单元测试中使用它们。

我创建了一个资源文件并将其标记为“资源根”目录,并将我的 .json 文件放在其中。由于这些文件仅用于测试,我不希望将它们放在 /res 目录中,因为它会不必要地使应用程序膨胀。

我正在尝试使用以下代码打开资源文件,但是 inputStream 返回为 null。

InputStream inputStream = Thread.currentThread().getContextClassLoader()
                          .getResourceAsStream("file.json”);

我在 .iml 文件中设置了以下内容,应该将目录表示为资源,但它似乎没有任何效果。

<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />

有没有人知道我可能会出错的地方?提前致谢!

【问题讨论】:

  • 为什么这个被降价了?似乎是一个合理且描述良好的问题,无论他是否希望将资源从 res 目录中取出。乍一看,将不同来源标记为资源的能力应该支持他的要求。

标签: java android junit intellij-idea android-studio


【解决方案1】:

你可以使用资源文件夹下的asset文件夹或raw文件夹

【讨论】:

  • 感谢您的回答。由于这些文件仅用于运行单元测试,我不希望将它们放在 android res 文件夹中。所以我在测试目录中创建了一个资源目录
  • @Smalesy - 你想要的东西让位给 Android 提供的东西。为了实现您的目标,您必须使用受支持的构建块 - 或者按照此处的建议将数据打包到 apk 中,或者在运行时通过网络传输或使用 ADB 将其推送到外部存储。
  • 他可以使用 assets 文件夹而不是 res (以及更好的批次)(只是为了更正上面答案中的错字)这不在 res 之下,但诚然没有解决他的“想要” .
  • 对于测试使用/src/androidTest/assets//src/test/assets/
【解决方案2】:

在构建应用的 APK 文件时,它不包含您在“res”和“asset”之外创建的目录。测试时仅将 APK 内的文件部署到设备或模拟器。因此,无法测试您未包含在 APK 中的文件。

测试目录中的文件似乎不可访问。因此,AFAIK,您必须将文件放入应用程序 APK 中,然后再将其删除。或者,更好的是,可以使用 gradle 生成应用 APK 的一个版本用于测试和另一个版本用于发布。发布版本可能会排除该文件。

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多