Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 确定文件是zip文件还是.xlsx文件_Excel_Scala_Zip_Xlsx_Unzip - Fatal编程技术网

Excel 确定文件是zip文件还是.xlsx文件

Excel 确定文件是zip文件还是.xlsx文件,excel,scala,zip,xlsx,unzip,Excel,Scala,Zip,Xlsx,Unzip,根据答案和另一个我目前找不到的答案,我在Scala中构建了一个函数来确定给定的文件路径是否为zip文件。显然,如果zip文件是存档文件,那么它们的标题会用一组特定的幻数进行签名 我的基本功能是:1。接收一个文件2。确定某个文件是否为zip文件,3a。如果是,请解压缩该文件并移动生成的文件。3b。如果不是zip文件,只需移动该文件即可。因此,首先,通过此函数运行该文件以确定它是否为zip文件: import java.io.{File, RandomAccessFile} import org.

根据答案和另一个我目前找不到的答案,我在Scala中构建了一个函数来确定给定的文件路径是否为zip文件。显然,如果zip文件是存档文件,那么它们的标题会用一组特定的幻数进行签名

我的基本功能是: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
    }
然而,现在出现了一点bug/edge情况,最后一行评估
文件签名
不再总是准确的。有时,我必须通过此文件传递.xlsx文件(以及包含.xlsx文件的zip文件)。具体来说,.xlsx文件是一个zip文件,在上面的代码中,
fileSignature==0x504B0304
,会使flat.xslx文件计算为true

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


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

由于.zip和.xlsx具有相同的幻数,我无法找到有效的zip文件

因此,我使用ApacheTika来查找确切的文档类型

即使将文件重命名为zip,它也会找到确切的文件类型


参考资料显然我也在寻找同样的答案。 我有线索。看

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

这是您需要的函数
wand::get\u content\u type

几乎没有其他线索


A*.xlsx文件是一个*.zip文件。试试看

“ren MyFile.xlsx MyFile.xlsx.zip”


然后打开它。

查看文件后缀是否有问题?是的,因为有时“.zip”或“.xlsx”不可靠。这也可能是伪造的-我不担心恶意伪造的文件,只是传入文件的源可能会去掉后缀或意外添加后缀。打开的XML文件具有标准的内部文件结构。您可以检查压缩文件的内容,如果文件结构表明它是一个打开的XML文件,您可以使用它。@Bob抱歉,我真的不知道-打开的XML文件和.xlsx文件相关吗?xlsx文件使用打开的XML格式:通过这样做,您可以将zipfile转换为压缩的zipfile。