scala:如何读取jar中的文件

scala:如何读取jar中的文件,scala,jar,Scala,Jar,我有这样的目录结构 src 主要 资源 text.txt 斯卡拉 你好 斯卡拉世界酒店 试验 与主文件夹相同 pom.xml 在IDE(Intellij10)中时,我可以使用相对路径(“src/main/resource/text.txt”)访问它,但在jar中编译时似乎无法做到这一点。如何读取该文件 另外,我发现test.txt被复制到jar的根目录中。这是正常的行为吗?因为我担心这会与src/test/resources中的其他资源文件冲突 谢谢- 一旦文件位于j

我有这样的目录结构

  • src

    • 主要
      • 资源
        • text.txt
      • 斯卡拉
        • 你好
          • 斯卡拉世界酒店
    • 试验
      • 与主文件夹相同
  • pom.xml

在IDE(Intellij10)中时,我可以使用相对路径(“src/main/resource/text.txt”)访问它,但在jar中编译时似乎无法做到这一点。如何读取该文件

另外,我发现test.txt被复制到jar的根目录中。这是正常的行为吗?因为我担心这会与src/test/resources中的其他资源文件冲突

谢谢-

一旦文件位于jar中,您就无法使用标准FileReader流访问它,因为它被视为一种资源。您将需要使用Class.getResourceAsStream()


复制到根目录中的test.txt不是正常行为,可能是IDE的设置

8年后,我也面临着同样的问题。为了缓解未来开发者的生活,以下是答案:

要复制到根目录中,如下所示:

资源文件夹类似于src文件夹,因此内容是 已复制,而不是文件夹本身

现在关于操作问题:

import scala.io.Source

val name = "text.txt"
val source: Source = Source.fromInputStream(getClass.getClassLoader.getResourceAsStream(name))
// Add the new line character as a separator as by getLines removes it
val resourceAsString:  String = source.getLines.mkString("\n")
// Don't forget to close
source.close

关于资源文件的位置。maven呢?我计划两者都使用,所以我希望它们的行为方式相同。我还在为如何读取jar中的文件而挣扎。好的,明白了。虽然我觉得奇怪,我必须处理输入流来阅读。这是设计还是什么?这是对设计的逻辑限制。一旦文件在jar中,您就不能通过文件路径从文件系统中读取它,因为它不在jar中。现在它是压缩档案中的一块数据,这太糟糕了。我希望有一些通用的方法来处理jar内外的文件。我想我必须重新考虑部署jar文件的方式。