基于这个答案和另一个我现在找不到的答案,我用Scala构建了一个函数来确定给定的文件路径是否为zip文件。显然,如果是存档文件,zip文件的头部将带有一组特定的幻数签名。
然而现在有一个小错误 / 特殊情况,最后一行评估
(注意:旧版/经典Excel文件没有这个问题)
是否有编程的方法来区分.xlsx文件和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
}
然而现在有一个小错误 / 特殊情况,最后一行评估
fileSignature
的内容不再总是准确的。我有时需要通过这个(以及装满.xlsx文件的zip文件)。.xlsx文件是一个zip文件,具体来说,在上面的代码中,fileSignature == 0x504B0304
将导致一个平面.xslx文件被评估为true。(注意:旧版/经典Excel文件没有这个问题)
是否有编程的方法来区分.xlsx文件和zip文件?