有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Android应用程序和本地单元测试中加载相同的JSON文件?

我有一个Android项目,它显示JSON文件中的数据。按照以下方法从资产目录中读取文件:

src/main/assets/my_file.json

InputStream is = getResources().getAssets().open(filename);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// use StringBuilder to get file contents as String

我还有需要相同JSON文件的本地单元测试。为了避免仪器测试的缓慢,我目前正在加载文件的副本,如下所示:

src/main/resources/my_copy.json

File testData = new File(getClass().getResource(filename).getPath());
InputStream is = new FileInputStream(testData);
// read File as before

是否有一种方法允许JSON文件存储在一个位置,同时在本地JVM上运行单元测试


共 (2) 个答案

  1. # 1 楼答案

    可以使用ClassLoader#getResourceAsStream()在Android应用程序中访问资源目录中的文件。这将返回一个InputStream,然后可用于读取文件。这样可以避免在资源和资产目录之间复制文件

    InputStream is = getClass().getClassLoader().getResourceAsStream("my_file.json");
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    
    String line = null;
    StringBuilder sb = new StringBuilder();
    
    while ((line = br.readLine()) != null) {
        sb.append(line);
        }
    }
    String json = sb.toString();
    
  2. # 2 楼答案

    如果您使用的是机器人分子,请参见this answer

    请注意,“资产”目录是一个Android概念,它不同于Java资源。也就是说,您还可以将JSON文件从assets移动到resources,并像在任何Java应用程序中一样,从Android和JVM表单中使用它