【问题标题】:How to read a file from classpath without external dependencies?如何在没有外部依赖的情况下从类路径读取文件?
【发布时间】:2011-05-25 08:45:13
【问题描述】:

Scala 中是否有一个单行器可以在不使用外部依赖项的情况下从类路径读取文件,例如commons-io?

IOUtils.toString(getClass.getClassLoader.getResourceAsStream("file.xml"), "UTF-8")

【问题讨论】:

  • 不依赖于 commons-io 或不使用类加载器。也许通过支持像 Spring "classloader:..." 之类的语法

标签: string scala classpath


【解决方案1】:
val text = io.Source.fromInputStream(getClass.getResourceAsStream("file.xml")).mkString

如果要确保文件已关闭:

val source = io.Source.fromInputStream(getClass.getResourceAsStream("file.xml"))
val text = try source.mkString finally source.close()

【讨论】:

  • 请注意,这将使 file.xml 的文件句柄保持打开状态,即使在生成字符串之后也是如此。
【解决方案2】:

如果文件在资源文件夹中(那么它将在类路径的根目录中),您应该使用它也在类路径的根目录中的Loader类。

如果您想获取内容,这是代码行(在 scala 2.11 中):

val content: String  = scala.io.Source.fromInputStream(getClass.getClassLoader.getResourceAsStream("file.xml")).mkString

在其他版本的 Scala 中,Source 类可能在其他类路径中

如果你只想获取资源:

val resource  = getClass.getClassLoader.getResource("file.xml")

【讨论】:

    【解决方案3】:

    只是一个更新,使用 Scala 2.13 可以执行以下操作:

    import scala.io.Source
    import scala.util.Using
    
    Using.resource(getClass.getResourceAsStream("file.xml")) { stream =>
      Source.fromInputStream(stream).mkString
    }
    

    希望它可以帮助某人。

    【讨论】:

      【解决方案4】:

      Read entire file in Scala?@daniel-spiewak 中提出了一种不同的方法,我个人更喜欢这种方法而不是@dacwe 的回应。

      // scala is imported implicitly
      import io.Source._
      
      val content = fromInputStream(getClass.getResourceAsStream("file.xml")).mkString
      

      但我想知道它是否仍然是单线?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        • 2013-06-28
        • 1970-01-01
        • 2014-04-23
        • 2012-06-11
        • 2017-05-25
        • 2018-12-21
        相关资源
        最近更新 更多