5

我在我的一个 android 项目中实现了一个 JSON 接口,用于通过 http 获取模型数据。

到目前为止这有效,我想写一些测试。我按照 android 文档中的建议创建了一个测试项目。为了测试 JSON 接口,我需要一些我想放入文件中的测试数据。

我的研究表明,最好将这些文件放在 android 测试项目的 assets 文件夹中。要访问资产文件夹中的文件,应该通过 InstrumentationTestCase 扩展测试类。那么应该可以通过在资源对象上调用 getAssets().open() 来访问文件。所以我想出了以下代码:

public class ModelTest extends InstrumentationTestCase {

  public void testModel() throws Exception {

    String fileName = "models.json";
    Resources res = getInstrumentation().getContext().getResources();
    InputStream in = res.getAssets().open(fileName);
    ...
  }
}

不幸的是,我在尝试访问“models.json”文件时收到“没有这样的文件或目录 (2)”错误。(/assets/models.json)

当通过以下方式获取可用文件列表时

String[] list = res.getAssets().list("");

“models.json”列在那里。

我在 Android 4.2.2 api level 17 上运行这些测试。

4

2 回答 2

2
public static String readFileFromAssets(String fileName, Context c) {
    try {
        InputStream is = c.getAssets().open(fileName);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        String text = new String(buffer);

        return text;

    } catch (IOException e) {
        throw new RuntimeException(e);
    }

}

然后使用以下代码:

JSONObject json = new JSONObject(Util.readFileFromAssets("abc.txt", getApplicationContext()));
于 2013-04-26T10:20:04.360 回答
0

请使用以下代码:

AssetManager assetManager = getResources().getAssets();

输入流 inputStream = null;

try {
    inputStream = assetManager.open("foo.txt");
        if ( inputStream != null)
            Log.d(TAG, "It worked!");
    } catch (IOException e) {
        e.printStackTrace();
    }
于 2013-04-26T10:18:36.947 回答