excel - 确定文件是 zip 文件还是 .xlsx 文件

标签 excel scala zip xlsx unzip

基于this答案和另一个我目前找不到的答案,我在 Scala 中构建了一个函数来确定给定的文件路径是否是 zip 文件。显然,如果 zip 文件是存档文件,则其 header 会使用一组特定的魔数(Magic Number)进行签名。

我需要的基本功能是:1.接收文件2.确定文件是否是zip文件,3a。如果是,则解压缩文件并移动生成的文件。 3b.如果不是 zip 文件,只需移动该文件。因此,首先,通过此函数运行文件以确定它是否是 zip 文件:

import java.io.{File, RandomAccessFile}

import org.apache.commons.io.IOUtils

def isZipFile(filePath: String): Boolean = {
      val file = new File(filePath)
      var fileSignature = 0
      if (file.exists()) {
        val raf = new RandomAccessFile(file, "r")
        try {
          fileSignature = raf.readInt()
        } catch {
          case e: Exception => println("Whoops")
        } finally {
          IOUtils.closeQuietly(raf)
        }
      }
      fileSignature == 0x504B0304 || fileSignature == 0x504B0506 || fileSignature == 0x504B0708
    }

但是现在存在一些错误/边缘情况,并且评估 fileSignature 的最后一行不再总是准确的。我有时必须通过此传递 .xlsx 文件(以及充满 .xlsx 文件的 zip 文件)。具体来说,.xlsx 文件是一个 zip 文件,在上面的代码中,fileSignature == 0x504B0304 会导致平面 .xslx 文件评估为 true。

(注意:较旧/经典的 Excel 文件没有此问题)

是否有任何编程方式来区分 .xlsx 文件和 zip 文件之间的区别?

最佳答案

显然我也在寻找同样的答案。 我得到了领先。看https://gitlab.com/hrbrmstr/wand/blob/master/R/check-office.R

在 R 中,您可以使用它来确定 zip 和 xlsx(以及 docx 等)之间的差异

这是您需要的函数wand::get_content_type

几乎没有其他线索

关于excel - 确定文件是 zip 文件还是 .xlsx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432256/

相关文章:

excel - 如何删除 Excel VBA 中的多个列?

scala - 为什么偏应用需要指定参数类型?

php - 如何在 Linux 服务器上使用 shell 命令在 PHP 中创建 zip 文件

Excel VBA 文本框字体大小

excel - 过滤具有几乎匹配列的行

c# - NPOI:创建一个包含两个不同大小字符串的单元格

scala - 如何在 SBT 的多项目构建中使用另一个子项目中的对象/类型?

scala - apache Spark 纱簇

python - 如何检查它是否是python中存档的文件或文件夹?

python - 为什么此代码不备份/ZIP 目录?