Scala新手,在阅读Scala工作表中的XML
文件时遇到问题。到目前为止,我有:
C:\
驱动器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)
}
但是,当我创建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.scala
:C:\eclipse\workspace\xml_data\.
test_sample_data.sc
:C:\eclipse\.
所以这就是导致问题的原因。有谁知道为什么会这样?绝对文件路径可以解决问题。这是最好的解决方案吗?
答案 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"))
}