当前位置:网站首页>获取文件类型
获取文件类型
2022-07-20 23:31:00 【关机重启】
通过文件后缀名获取
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属性来获取
边栏推荐
- MySQL多行数据合成一行函数GROUP_CONCAT
- Es basic knowledge and common query basis
- SAP FIORI专题之二:用webide构建带导航栏的fiori
- Yolov7 experiment test 1: remote sensing image detection application
- The difference between memory overflow and memory leak
- redis 实现分布式全局唯一id
- 同城两中心自适应同步模式部署
- Encapsulate the global input component and bind parent-child data through V-model
- Analysis of tars source code 23
- Weekly recommended short videos: does the development of the Internet of things pose a greater challenge?
猜你喜欢
随机推荐
C#(四十一)之线程
Deep learning method of convolutional neural network single image super-resolution
Huawei wireless devices are configured with fast roaming between APs of the same service VLAN
如何分析并设计性能测试场景
C#(三十五)之在滚动窗口中绘图
在线博客系统设计
Yolov7 experiment test 1: remote sensing image detection application
Analysis of tars source code 23
华为无线设备配置流量监管
静态通讯录的实现
模块学习(五)——矩阵键盘
带你认识一下数仓的分区自动管理
Es basic knowledge and common query basis
Practice - how many threads are appropriate to create
C#(四十四)之线程死锁
What have I experienced to become a harder tester than development?
(c语言)柔性数组
线程间有哪些资源是不可以共享的?
免费、强大的开源笔记软件Joplin综合评测 —印象笔记的开源替代
Array tarray in ue4/5