Kotlin-找不到文件例外:虽然文件确实存在

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin-找不到文件例外:虽然文件确实存在相关的知识,希望对你有一定的参考价值。

尝试将XML文件解析到我的Kotlin应用程序时遇到以下问题:

java.io.FileNotFoundException: /src/main/res/locations.xml: open failed: ENOENT (No such file or directory)

下面是负责处理文件加载的代码:

fun parseToObject() 
    val thread = Thread(Runnable 
        try 
            val xml = File("src/main/res/locations.xml")
            val doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xml)
            println("Root Node: " + doc.documentElement.nodeName)
         catch (e: Exception) 
            print(e.message)
        
    )
    thread.start()

有人知道我可能做错了吗?我尝试使用完整路径以及较短路径,但似乎不喜欢其中任何一个。

答案

除非您在res中,否则它们在运行时不能作为文件访问res/raw/目录中的项目文件。由于优化,它们甚至可能不存在于已安装的应用程序中。

您可以将文件放在main/res/raw/main/assets/中。您可以将资产作为InputStream(而不是直接作为File)获得。

使用原始资源:

val doc = Resources.openRawResource(R.raw.locations).use  xmlInputStream ->
    DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlInputStream)

println("Root Node: " + doc.documentElement.nodeName)

使用资产:

val doc = context.assets.open("locations.xml").use  xmlInputStream ->
    DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(xmlInputStream)

println("Root Node: " + doc.documentElement.nodeName)

原始资源与资产的优缺点:

原始资源具有ID,并且可以由其他资源XML文件引用。资产只能通过String文件名查找来访问,但是可以将它们组织到assets中的子目录中。

以上是关于Kotlin-找不到文件例外:虽然文件确实存在的主要内容,如果未能解决你的问题,请参考以下文章

Spring 确实存在时找不到 bean xml 配置文件

Powershell > 找不到路径,但它确实存在

Visual Studio 编译项目失败,提示找不到文件

例外:无法加载文件或程序集 XXXX 或其依赖项之一。该系统找不到指定的文件

web页面找不到资源文件,报404,但是资源文件存在且路径没错

Android绑定 - 找不到嵌套类型的顶级祖先,但存在于aar文件中