Excel 确定文件是zip文件还是.xlsx文件
根据答案和另一个我目前找不到的答案,我在Scala中构建了一个函数来确定给定的文件路径是否为zip文件。显然,如果zip文件是存档文件,那么它们的标题会用一组特定的幻数进行签名 我的基本功能是:1。接收一个文件2。确定某个文件是否为zip文件,3a。如果是,请解压缩该文件并移动生成的文件。3b。如果不是zip文件,只需移动该文件即可。因此,首先,通过此函数运行该文件以确定它是否为zip文件: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.
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
几乎没有其他线索
然后打开它。查看文件后缀是否有问题?是的,因为有时“.zip”或“.xlsx”不可靠。这也可能是伪造的-我不担心恶意伪造的文件,只是传入文件的源可能会去掉后缀或意外添加后缀。打开的XML文件具有标准的内部文件结构。您可以检查压缩文件的内容,如果文件结构表明它是一个打开的XML文件,您可以使用它。@Bob抱歉,我真的不知道-打开的XML文件和.xlsx文件相关吗?xlsx文件使用打开的XML格式:通过这样做,您可以将zipfile转换为压缩的zipfile。