如何从原始文件夹中获取 json 文件?

Posted

技术标签:

【中文标题】如何从原始文件夹中获取 json 文件?【英文标题】:How to get a json file from raw folder? 【发布时间】:2015-12-07 17:59:00 【问题描述】:

我想使用原始文件夹中的 user.json 来获取新文件:

// read from file, convert it to user class
User user = mapper.readValue(new File(**R.raw.user**), User.class);

我发现 InputStream 可以做到:

InputStream ins = res.openRawResource(
                        getResources().getIdentifier("raw/user",
                                "raw", getPackageName()));

有没有更好的方法,直接使用我的 json 文件 ID ?

【问题讨论】:

openRawResource(R.raw.user) 有什么问题? 没有错,我只是想知道我是否可以使用 R.raw 等不同的东西而不是 InputStream 来获取我的新文件 【参考方案1】:
InputStream is = getResources().openRawResource(R.raw.json_file);
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try 
    Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
    int n;
    while ((n = reader.read(buffer)) != -1) 
        writer.write(buffer, 0, n);
    
 finally 
    is.close();


String jsonString = writer.toString();

【讨论】:

assets 和 raw 是不同的文件夹,不是吗?【参考方案2】:

ObjectMapper.readValue 也以InputStream 作为源。使用 openRawResource 方法从 json 文件中获取 InputStream 并将其传递给 readValue

InputStream in = getResources().openRawResource(R.raw.user);
User user = mapper.readValue(in, User.class);

【讨论】:

【参考方案3】:

科特林方式:

val raw = resources.openRawResource(R.raw.posts)
        val writer: Writer = StringWriter()
        val buffer = CharArray(1024)
        raw.use  rawData ->
            val reader: Reader = BufferedReader(InputStreamReader(rawData, "UTF-8"))
            var n: Int
            while (reader.read(buffer).also  n = it  != -1) 
                writer.write(buffer, 0, n)
            
        

        val jsonString = writer.toString()

【讨论】:

以上是关于如何从原始文件夹中获取 json 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 wav 文件中获取原始音频?

如何从麦克风实时获取原始音频帧或从 iOS 中保存的音频文件获取原始音频帧?

从 C# 中的 JSON 对象获取对象值

从 .xml 文件中获取原始维度

如何从 Angular 4 中的 JSON 文件中获取 json 数据

从原始文件中获取最多 x 个字节的 AudioInputStream(剪切音频文件)