当前位置: 首页 > 知识库问答 >
问题:

如何使用Kotlin从android中的资产读取json文件?

简烨烁
2023-03-14

我已经用过java,但发现Kotlin很难用。

我已经用谷歌搜索过了,但没有一个对我有用。

/**
 * Get the json data from json file.
 *
 * @param context  the context to acces the resources.
 * @param fileName the name of the json file
 * @return json as string
 */
public static String getJsonFromAsset(Context context, String fileName) {
    String json = "";
    try {
        InputStream stream = context.getAssets().open(fileName);
        int size = stream.available();
        byte[] buffer = new byte[size];
        stream.read(buffer);
        stream.close();
        json = new String(buffer, "UTF-8");

    } catch (Exception e) {
        e.printStackTrace();
    }
    return json;
}

我想要静态编程语言的代码。

共有3个答案

柴默
2023-03-14

您可以使用以下内容

class LocalJSONParser {

companion object {
    fun inputStreamToString(inputStream: InputStream): String {
        try {
            val bytes = ByteArray(inputStream.available())
            inputStream.read(bytes, 0, bytes.size)
            return String(bytes)
        } catch (e: IOException) {
            return ""
        }
      }
    }
}

// jsonFileName = "data.json"
inline fun <reified T> Context.getObjectFromJson(jsonFileName: String): T {
val myJson =LocalJSONParser.inputStreamToString(this.assets.open(jsonFileName))
return Gson().fromJson(myJson, T::class.java
}
孟海
2023-03-14

Java代码也可以从Android Studio转换为静态编程语言。这是带有上下文扩展功能的转换解决方案。

@Throws(IOException::class)
fun Context.readJsonAsset(fileName: String): String {
    val inputStream = assets.open(fileName)
    val size = inputStream.available()
    val buffer = ByteArray(size)
    inputStream.read(buffer)
    inputStream.close()
    return String(buffer, Charsets.UTF_8)
}
漆雕彬彬
2023-03-14

从Kotlin中的资产文件夹读取json文件非常简单,只需使用以下代码

val fileInString: String =
  applicationContext.assets.open(fileName).bufferedReader().use { it.readText() }
 类似资料:
  • 下面是JSON结构。 从资产中读取的代码是 我想显示的进度加载对话框,当下一个问题加载,任何帮助将非常感谢。提前道谢。

  • 使用Spring Boot 2.1.5版本,我们创建了以下示例Spring Boot微服务: Maven项目结构: 有以下JSON文件(在src/main/Resources/data.json中): 微服务应用: 引发以下异常: FilePathUtils.java: 我可能做错了什么?

  • 我试图加载预填充数据到我的flutter应用程序。我已经在项目的根目录中创建了资产文件夹 在pubspec.yaml中添加了该文件引用 下面是我访问数据库的DBHandler.dart文件代码 我得到的错误是 在代码的给定行下面。 ByteData=等待rootBundle.load(连接('资产',dbName));

  • 问题内容: 我在abc.jar的类路径中有一个文件X.json。abc.jar中有一个readFile方法,该文件读取为 如果我从jar的上下文中运行它,即在abc.jar内的某个文件中的main方法中运行它,它将很好地读取 但是,当从abc.jar外部从其他代码中调用readFile时,它将失败 如何通过从jar的上下文外部调用readFile方法获取File对象? 问题答案: 到部署时,这些资

  • 问题内容: 我想像这样从我的jar中读取资源: //Read the file 并且在Eclipse中运行它时效果很好,但是如果我将其导出到jar中运行,则会出现: 我真的不知道为什么,但是经过一些测试,我发现我是否改变了 至 然后它的作用相反(它在jar中起作用,但在Eclipse中不起作用)。 我正在使用Eclipse,并且包含我的文件的文件夹位于类文件夹中。 问题答案: 而不是尝试将资源作为

  • 问题内容: 我的资产文件夹中有一个文件…我该如何阅读? 现在我正在尝试: 但是它抛出了一个空指针异常… 该文件称为“原始文件”,它位于文件夹资产中 我尝试使用以下方法进行投射: 和 但是都失败了…有什么建议吗? 问题答案: 您可以使用打开输入流。 是该类的一种方法。 还要注意,您不应该重新创建字符缓冲区(,循环的最后一行)。