Scala: 如何在JAR文件中读取文件

3
我有如下目录结构:
  • src

    • main
      • resources
        • text.txt
      • scala
        • hello
          • world.scala
    • test
      • 与主文件夹相同
  • pom.xml

在IDE(Intellij10)中,我可以使用相对路径("src/main/resource/text.txt")访问它,但似乎在jar中编译时无法这样做。如何读取该文件?
此外,我发现test.txt被复制到jar的根目录中。这是正常行为吗?由于我担心这将与src/test/resources中的其他资源文件冲突。
谢谢
2个回答

5

关于资源文件的位置,那么 Maven 呢?我计划同时使用它们,所以希望它们都以相同的方式运行。然而,我仍在苦苦思索如何在 JAR 文件中读取该文件。 - undefined
好的,明白了。虽然我感觉有点奇怪,为什么要处理输入流来进行读取操作?这是故意设计的吗? - undefined
1
这是设计上的一个逻辑限制。一旦文件被放入jar包中,你就无法通过文件路径从文件系统中读取它,因为它并不存在那里。它现在是一个压缩存档中的数据块。 - undefined
真可惜。我希望有一种通用的方法来处理JAR文件,无论是在其中还是在外部。我觉得我必须重新考虑部署JAR文件的方式了。 - undefined

3

8年后,我也面临着同样的问题。为了方便未来开发人员的生活,这里是答案:

将其复制到根目录中normal behaviour,原因如下:

资源文件夹类似于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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接