Android 获取文件类型

根据文件头获取文件类型
我这里只列举了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 "其他"
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值