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

Mul*_*efa 2 eclipse scala

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

  • 下载了Scala IDE(适用于Windows)并将其解压缩到我的C:\驱动器中
  • 使用以下文件路径创建了Scala项目: C:\eclipse\workspace\xml_data
  • 使用以下数据创建xml文件...\xml_data\music.xml
  • 创建了一个包sample_data并创建了以下对象(带有文件路径:) ...\xml_data\src\sample_data\SampleData.scala:

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

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

import sample_data.SampleData

object test {
  println(SampleData.data) 
}
Run Code Online (Sandbox Code Playgroud)

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

工作区是C:\eclipse\workspace.任何帮助或见解非常感谢.干杯!

更新:

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

  • SampleData.scala: C:\eclipse\workspace\xml_data\.
  • test_sample_data.sc: C:\eclipse\.

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

小智 7

关于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")
}
Run Code Online (Sandbox Code Playgroud)

Scala工作表:

import sample_data.SampleData

object test {
  val workDir = ... // Using the hack or hardcoding
  println(SampleData.data(workDir + "/music.xml")) 
}
Run Code Online (Sandbox Code Playgroud)