Scala IDE:无法将 XML 文件读入 Scala 工作表



Scala 新手,在 Scala 工作表中读取XML文件时遇到问题。到目前为止,我有:

  • 下载了Scala IDE(适用于Windows)并将其解压缩到我的C:驱动器
  • 创建了一个具有以下文件路径的 Scala 项目:C:eclipseworkspacexml_data
  • 使用以下数据创建了xml文件...xml_datamusic.xml
  • 创建了一个包sample_data并创建以下对象(文件路径:...xml_datasrcsample_dataSampleData.scala):

    package sample_data
    import scala.xml.XML
    object SampleData {
      val data = XML.loadFile("music.xml")
    }
    object PrintSampleData extends Application {
      println(SampleData.data)
    }
    

但是,当我创建 Scala 工作表时,这可以正常运行test_sample_data.sc

import sample_data.SampleData
object test {
  println(SampleData.data) 
}

我得到一个java.lang.ExceptionInInitializerError其中包括:Caused by: java.io.FileNotFoundException: music.xml (The system cannot find the file specified)

工作区C:eclipseworkspace。非常感谢任何帮助或见解。干杯!

更新:

按照 aepurniet 的建议,我跑了new java.io.File(".").getAbsolutePath(),分别得到了以下内容:

  • SampleData.scalaC:eclipseworkspacexml_data.
  • test_sample_data.scC:eclipse.

所以这就是导致问题的原因。有谁知道为什么会这样?绝对文件路径可解决此问题。这是最好的解决方案吗?

关于导致 scala 类和工作表之间用户目录不同的原因:您可能会遇到此处
列出的 Eclipse IDE 问题https://github.com/scala-ide/scala-worksheet/issues/102

Jfyi,我使用了 Intellij,这个问题在那里无法重现。

关于使用绝对路径:

使用绝对路径可以很好地进行快速测试,但对于实际实现来说不是一个好的做法。可以考虑将路径与文件名一起传递到 SampleData。

这里提到的一些技巧可以从 scala 工作表中获取工作区的基本路径: 配置 Scala 工作表的工作目录

如果这只是为了您的测试,那么破解工作表中工作区的绝对路径对您来说可能是最简单的。

SampleData.scala

package sample_data
import scala.xml.XML
object SampleData {
  def data(filename: String)  = XML.loadFile(filename)
}
object PrintSampleData extends Application {
  println(SampleData.data(System.getProperty("user.dir") + "/music.xml")
}

斯卡拉工作表:

import sample_data.SampleData
object test {
  val workDir = ... // Using the hack or hardcoding
  println(SampleData.data(workDir + "/music.xml")) 
}

最新更新