【问题标题】:InputStream to a list in ScalaInputStream 到 Scala 中的列表
【发布时间】:2016-12-29 11:37:17
【问题描述】:

我正在尝试将文件作为输入流读取,然后将文件的内容转换为 scala 中的列表。这是我的代码

val fileStream = getClass.getResourceAsStream("src/main/scala-2.11/com/dc/returnsModel/constants/abc.txt")
val item_urls = Source.fromInputStream(fileStream).getLines.toList

这现在可以工作了。我得到一个 NullPointer 异常。 我该如何纠正这个问题?

但是,这可行(但我不能在 JAR 文件中使用它)

val item_urls = Source.fromFile("src/main/scala-2.11/com/dc/returnsModel/constants/aa.txt").getLines.toList

【问题讨论】:

标签: scala inputstream


【解决方案1】:

getClass.getResourceAsStream 不需要完整路径,它使用与当前类相同的类加载器在 classpath 中搜索请求的文件。

解决这个问题在一定程度上取决于调用此代码的项目和类的结构:

  • 如果getClass 返回的类与您尝试加载的文件 (com.dc.returnsModel.constants) 在同一个包中,那么您应该仅引用 文件名: p>

    getClass.getResourceAsStream("abc.txt")
    
  • 如果getClass返回的类位于不同的包中,路径应该以/开头,代表类路径的根,因此包名必须跟在后面:

    getClass.getResourceAsStream("/com/dc/returnsModel/constants/abc.txt")
    

【讨论】:

    【解决方案2】:

    您必须提供从根目录开始的正确路径。 在您的情况下,根目录是您的 src/scala-2.11 文件夹的开始。

    一个例子

    object SO extends App {
      val resourceStream = SO.getClass.getResourceAsStream("/com/sm.txt")
      println(Source.fromInputStream(resourceStream).getLines.toList)
     }
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2020-09-02
      相关资源
      最近更新 更多