关机重启

V1

2022/07/20阅读:12主题:橙心

获取文件类型

通过文件后缀名获取

 val fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
                .toString())
val mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                fileExtension.lowercase()) ?: ""

通过ContentResolver查询

  val mimeType = if (uri.scheme == ContentResolver.SCHEME_CONTENT) {
            val cr: ContentResolver = ContextUtil.context.contentResolver
            cr.getType(uri) ?: ""
        } else {
            val fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
                .toString())
            MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                fileExtension.lowercase()) ?: ""
        }

使用MediaMetadataRetriever查询

 val mediaMetadataRetriever = MediaMetadataRetriever()
 mediaMetadataRetriever.setDataSource(filePath)
 val mimeType = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE) ?: ""
 mediaMetadataRetriever.release()

使用Files.probeContentType方式

在Android上要26以上才能用

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val type = Files.probeContentType(File(filePath).toPath())
        }

读取文件头部字节

使用java中URLConnection提供的“类型猜测”方法查询

1. 通过文件名查询类型

URLConnection.guessContentTypeFromName(filePath)

2. 读取文件流判断类型

URLConnection.guessContentTypeFromStream()

读取文件头 前16个字节进行判断

 /**
     * 获取文件头信息
     *
     * @param filePath
     * @return
     */
  fun getFileHeader(filePath: String?): String? {
    var fileInputStream: FileInputStream? = null
    var value: String? = null
    try {
        fileInputStream = FileInputStream(filePath)
        val b = ByteArray(3)
        fileInputStream.read(b, 0, b.size)
        value = bytesToHexString(b)
    } catch (e: Exception) {
    } finally {
        if (null != fileInputStream) {
            try {
                fileInputStream.close()
            } catch (e: IOException) {
            }
        }
    }
    return value
}

 /**
     * 将byte字节转换为十六进制字符串
     *
     * @param src
     * @return
     */

private fun bytesToHexString(src: ByteArray?): String? {
    val builder = StringBuilder()
    if (src == null || src.isEmpty()) {
        return null
    }
    var hv: String
    for (i in src.indices) {
        hv = Integer.toHexString(src[i] and  0xFF).uppercase()
        if (hv.length < 2) {
            builder.append(0)
        }
        builder.append(hv)
    }
    return builder.toString()
}

BitmapFactory.Options

文件可转为Bitmap的话可以使用BitmapFactory.Options中的outMimeType属性来获取

分类:

后端

标签:

Java

作者介绍

关机重启
V1