根据文件头获取文件类型
我这里只列举了4种,其他种类只需要替换掉对应的判断即可
**
* 获取文件类型
* @author wdd
* 版本 : 1.0.0.5
* TODO 获取文件类型
* @author wdd
* created at 2022/9/7 14:08
*
*/
object FileTypeUtils {
/**
* 获取文件类型
* @return
* type: image:图片
* type: pdf:pdf
* type: ofd:ofd
* type: 其他:未识别,不支持
*/
fun type(inputStream: InputStream): String {
val b: ByteArray = ByteArray(4)
inputStream.read(b, 0, b.size)
val stringBuilder = StringBuilder()
// if (src == null || b.length <= 0) {
// return null
// }
for (i in b.indices) {
val v: Byte = b[i] and 0xFF.toByte()
val hv = Integer.toHexString(v.toInt())
if (hv.length < 2) {
stringBuilder.append(0)
}
stringBuilder.append(hv)
}
var xxx: String = stringBuilder.toString().uppercase(Locale.getDefault())
// println("头文件是:$xxx")
return getType(xxx)
}
/**
* 获取文件类型
* @return
* type: image:图片
* type: pdf:pdf
* type: ofd:ofd
* type: 其他:未识别,不支持
*/
fun type(bytes: ByteArray): String {
val b: ByteArray = ByteArray(4)
for (i in 0..3){
b[i] =bytes[i]
}
//inputStream.read(b, 0, b.size)
val stringBuilder = StringBuilder()
// if (src == null || b.length <= 0) {
// return null
// }
for (i in b.indices) {
val v: Byte = b[i] and 0xFF.toByte()
val hv = Integer.toHexString(v.toInt())
if (hv.length < 2) {
stringBuilder.append(0)
}
stringBuilder.append(hv)
}
var xxx: String = stringBuilder.toString().uppercase(Locale.getDefault())
// println("头文件是:$xxx")
return getType(xxx)
}
private fun getType(str :String):String{
return if (str.contains("FFD8FF")) "image"//"jpg"
else if (str.contains("89504E")) "image" //"png"
else if (str.contains("504B03")) "ofd"
else if (str.contains("255044")) "pdf"
else "其他"
}