我是Scala的新手,我有一个小任务,需要我从*.gz file
目录中解压缩resources
。
因此,我想要一种正确的方法来解析之后的文件内容。当然,我过去读过一些文章,例如:
ONE
TWO
THREE
我可以解析尚未归档但无法立即处理gz存档的文件内容。看起来我缺少一些小东西,因为我也是Java和Scala的新手。
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,但无法理解如何以正确的方式进行操作。
在此先感谢您的帮助!
答案 0 :(得分:3)
正如@Luis所说,这是您可以做的:
val inputStream = Thread.currentThread().getContextClassLoader.getResourceAsStream("test_text.csv.gz")
val gzipFileSource: BufferedSource = Source.fromInputStream(new GZIPInputStream(inputStream))
println(gzipFileSource.getLines.toList.head)