如何从单元测试中读取资源文件?

时间:2017-07-09 08:53:36

标签: java android junit

我的Android项目中只有一个Java模块。在那个项目中,我希望有一个单元测试,它从存储在resources文件夹中的本地json文件中读取内容。 Android Studio更改了资源文件夹的图标,因此我认为它将其识别为资源文件夹。

我如何阅读:

String json = Files.lines(Paths.get("file.json"))
                .parallel()
                .collect(Collectors.joining());

文件夹结构:

+project
  +app (android)
  +module (java only)
    +src
      +main
        +java
          +package
            -the java file
        +resources
            -file.json

我的问题是如何阅读文件?

在下方更新

URL resource1 = getClass().getResource("file.json");
URL resource2 = getClass().getClassLoader().getResource("file.json");
URL resource3 = Thread.currentThread().getContextClassLoader().getResource("file.json");
URL resource4 = ClassLoader.getSystemClassLoader().getResource("file.json");

所有这些都是空的。 我已经将json文件复制到resources/same.package.structure,但没有成功。

3 个答案:

答案 0 :(得分:1)

您应该使用Paths.get(URI)代替,例如:

ClassLoader loader = ClassLoader.getSystemClassLoader();

String json = Files.lines(Paths.get(loader.getResource("file.json").toURI()))
                   .parallel()
                   .collect(Collectors.joining());

这是因为您在Android平台上运行测试,并且在一个jar中打包,请使用BufferedReader.lines代替,例如:

ClassLoader  loader = activity.getClassLoader();

BufferedReader in = new BufferedReader(new InputStreamReader(
   loader.getResourceAsStream("file.json"),"UTF-8"
));

String json = in.lines()
                .parallel()
                .collect(Collectors.joining());

答案 1 :(得分:1)

不要用ClassLoaders完成所有这些复杂的事情。您可以从/ test / *类访问test / resources目录。

enter image description here

enter image description here

<强> UPD 这是使用SimpleXML使用其路径反序列化文件的方法。所以这里的源方法参数是你的资源文件路径

enter image description here

答案 2 :(得分:0)

显然这是一个错误,现在应该修复: https://issuetracker.google.com/issues/63612779

谢谢大家的帮助