无法访问 Scala 中相对路径中的文件以获取测试资源
Unable to access file in relative path in Scala for test resource
我已经使用 Maven 设置了我的 SCALA 项目,现在我正在编写测试并且需要访问资源路径子目录下的文件,如下所示:
src/test/resource/abc/123.sql
现在我正在做以下事情:
val relativepath = "/setup/setup/script/test.sql"
val path = getClass.getResource(relativepath).getPath
println(path)
但这指向 src/main/resource 文件夹而不是测试资源,有人知道我在这里做错了什么吗?
就像在 Java 中一样,将资源文件放在 src/main/resources
和 src/test/resources
下是一个很好的做法,因为 Scala 提供了一个很好的 API 从检索资源文件。
考虑到您将 test.sql
文件放在 src/test/resources/setup/setup/script/test.sql
下,您可以通过执行以下操作轻松读取该文件:
斯卡拉 2.12
import scala.io.Source
val relativePath = "setup/setup/script/test.sql"
val sqlFile : Iterator[String] = Source.fromResource(relativePath).getLines
Scala 之前的版本
import scala.io.Source
val relativePath = "setup/setup/script/test.sql"
val stream : InputStream = getClass.getResourceAsStream(relativePath)
val sqlFile : Iterator[String] = Source.fromInputStream(stream).getLines
这样做,您甚至可以将相同的文件放在 src/main/resources
中相同的相对路径下。在测试中尝试访问资源文件时,将考虑 src/test/resources
中的文件。
希望对您有所帮助。
我已经使用 Maven 设置了我的 SCALA 项目,现在我正在编写测试并且需要访问资源路径子目录下的文件,如下所示:
src/test/resource/abc/123.sql
现在我正在做以下事情:
val relativepath = "/setup/setup/script/test.sql"
val path = getClass.getResource(relativepath).getPath
println(path)
但这指向 src/main/resource 文件夹而不是测试资源,有人知道我在这里做错了什么吗?
就像在 Java 中一样,将资源文件放在 src/main/resources
和 src/test/resources
下是一个很好的做法,因为 Scala 提供了一个很好的 API 从检索资源文件。
考虑到您将 test.sql
文件放在 src/test/resources/setup/setup/script/test.sql
下,您可以通过执行以下操作轻松读取该文件:
斯卡拉 2.12
import scala.io.Source
val relativePath = "setup/setup/script/test.sql"
val sqlFile : Iterator[String] = Source.fromResource(relativePath).getLines
Scala 之前的版本
import scala.io.Source
val relativePath = "setup/setup/script/test.sql"
val stream : InputStream = getClass.getResourceAsStream(relativePath)
val sqlFile : Iterator[String] = Source.fromInputStream(stream).getLines
这样做,您甚至可以将相同的文件放在 src/main/resources
中相同的相对路径下。在测试中尝试访问资源文件时,将考虑 src/test/resources
中的文件。
希望对您有所帮助。