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

时间:2014-02-20 14:48:08

标签: eclipse scala

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

  • 下载了Scala IDE(适用于Windows)并将其解压缩到我的C:\驱动器
  • 使用以下文件路径创建了一个Scala项目:C:\eclipse\workspace\xml_data
  • 使用以下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)
    }
    

但是,当我创建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:\eclipse\workspace。任何帮助或见解非常感谢。干杯!

更新

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

  • SampleData.scalaC:\eclipse\workspace\xml_data\.
  • test_sample_data.scC:\eclipse\.

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

1 个答案:

答案 0 :(得分:7)

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

Jfyi,我使用的是Intellij,问题在那里是不可复制的。

关于使用绝对路径:

使用绝对路径可以很好地进行快速测试,但对于实际实现来说不是一个好习惯。您可以考虑将路径和文件名作为输入传递给SampleData。

这里提到的一些黑客从scala工作表中获取工作区的基本路径:Configure working directory of Scala worksheet

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

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")
}

Scala工作表:

import sample_data.SampleData

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