刚接触 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(系统找不到指定的文件)
。
工作空间为C:\eclipse\workspace
。非常感谢任何帮助或见解。干杯!
更新:
按照 aepurniet 的建议,我运行了 new java.io.File(".").getAbsolutePath()
并分别得到了以下结果:
SampleData.scala
:C:\eclipse\workspace\xml_data\.
test_sample_data.sc
:C:\eclipse\.
这就是导致问题的原因。有谁知道为什么会发生这种情况?绝对文件路径解决了问题。这是最好的解决方案吗?
最佳答案
关于导致 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"))
}
关于eclipse - Scala IDE : can't read XML file into scala worksheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21911210/