基于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/