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.scala
:C:eclipseworkspacexml_data.
-
test_sample_data.sc
:C: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"))
}