首页 > 解决方案 > 如何在 Scala 中正确解压缩 gz 存档

问题描述

我是 Scala 的新手,我有一个小任务需要我*.gz fileresources目录中解压缩。所以我想要一种正确的方法来做到这一点,以便能够在之后解析文件内容。当然我过去读过一些文章,比如 二三

我可以解析未归档但现在无法处理 gz 归档的文件内容。看起来我缺少一些小东西,因为我也是 Java 和 Scala 的新手。

斯卡拉版本- 2.21.0

我的部分代码如下:

object ResourceLoader {
    def loadResource(fileName: String): Try[InputStream] = Try(getClass.getResourceAsStream(fileName))


    def loadResource(fileName: String): Try[List[String]] =
        for {
            resourceStream <- loadResource(fileName)
            resourceContent = Source.fromInputStream(resourceStream).getLines.toList
        } yield resourceContent
}

然后我可以遍历未归档的文件,例如:

        val content = ResourceLoader.loadResourceContent("/test_text.csv") recover {
            case e: FileNotFoundException => println(s"Requested file not found: $e")
            case e: SecurityException => println(s"Permission denied: $e")
            case e: Exception => println(s"An unknown exception occurred: $e")
        }
        content.foreach(println)

但无法理解如何先解压缩 gz 存档然后对其进行迭代。

我希望在 loadResource 函数中使用 GZIPInputStream 而不是 getResourceAsStream 但不明白如何以正确的方式做到这一点。

预先感谢您的任何帮助!

标签: scalaarchivegzip

解决方案


正如@Luis 评论的那样,这就是你可以做的:


val inputStream = Thread.currentThread().getContextClassLoader.getResourceAsStream("test_text.csv.gz")
val gzipFileSource: BufferedSource = Source.fromInputStream(new GZIPInputStream(inputStream))

println(gzipFileSource.getLines.toList.head)

推荐阅读