从内部存储读取JSON文件内容

4
我该如何从内部存储中输出JSON文件的内容?以下是我目前正在处理的内容。
String filename = "names.json";
final File file = new File(Environment.getDataDirectory(), filename);
Log.d(TAG, String.valueOf(file));

日志显示为:/data/names.json names.json
[
  "names",
  {
    "name": "John Doe"
  }
]

1
尝试这个:https://dev59.com/g14b5IYBdhLWcg3w1UkN - Deepak Sachdeva
2个回答

5

从文件中读取字符串并将其转换为JsonObjectJsonArray

String jsongString = readFromFile();
JSONArray jarray = new JSONArray(str);

使用以下方法从内部存储文件读取数据并返回为String类型。
private String readFromFile() {

    String ret = "";
    InputStream inputStream = null;
    try {
        inputStream = openFileInput("names.json");

        if ( inputStream != null ) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (receiveString = bufferedReader.readLine()) != null ) {
                stringBuilder.append(receiveString);
            }

            ret = stringBuilder.toString();
        }
    }
    catch (FileNotFoundException e) {
        Log.e("login activity", "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e("login activity", "Can not read file: " + e.toString());
    }
    finally {
      try {
         inputStream.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }

    return ret;
}

我认为在finally块中关闭流更好。 - kostyabakay
@Kostya 是的,你说得对。谢谢你的建议。 - Priyank Patel

3

将您的JSON文件添加到res/raw/generated.json中

然后在您的活动中像这样访问JSON数据

InputStream is = getResources().openRawResource(R.raw.generated);
    Writer writer = new StringWriter();
    char[] buffer = new char[1024];
    try {
        Reader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        int n;
        try {
            while ((n = reader.read(buffer)) != -1) {
                writer.write(buffer, 0, n);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    String jsonString = writer.toString();
    Log.d("jsonString",jsonString);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接