我目前正在Android应用程序中使用内容URI,我需要一种可靠的方法来确定给定URI的文件类型。挑战在于这些URI没有任何与之关联的文件扩展名。例如,我想确定URI是否对应于CSS文件、JSON文件或任何其他特定的文件类型。
下面是我用来检索MIME类型的代码:
ContentResolver contentResolver = this.getContentResolver();
String mimeType = null;
Cursor cursor = contentResolver.query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
int mimeTypeColumnIndex = cursor.getColumnIndex(DocumentsContract.Document.COLUMN_MIME_TYPE);
if (mimeTypeColumnIndex != -1) {
mimeType = cursor.getString(mimeTypeColumnIndex);
}
}
} finally {
if (cursor != null) {
cursor.close();
}
}
如果MIME类型为null或等于“application/force-download”,我将返回到另一个名为detectMimeTypeUsingTika 1的方法,该方法利用Apache Tika库根据URI的内容检测MIME类型。然而,我注意到这个方法对于CSS、JS和JSON文件也始终返回“text/plain”。
下面是detectMimeTypeUsingTika 1的代码:
public static String detectMimeTypeUsingTika1(Uri uri, ContentResolver contentResolver) {
try {
InputStream inputStream = contentResolver.openInputStream(uri);
Tika tika = new Tika();
return tika.detect(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
有没有人可以建议一种更准确的方法或对我现有代码的任何改进,使我能够根据内容URI正确识别文件类型?目前,detectMimeTypeUsingTika 1方法始终为CSS、JS和JSON文件返回“text/plain”。我希望能够区分这些文件类型和其他文件类型,而不仅仅依赖于文件扩展名。谢谢你!
1条答案
按热度按时间bvhaajcl1#
要确定Android应用中内容URI的文件类型,可以通过从文件的显示名称中提取文件扩展名来提高代码的准确性。下面是代码的一个更短更简单的版本:
此代码段从光标检索文件的显示名称,然后使用子字符串提取文件扩展名。通过这样做,您可以准确地识别文件类型,而不仅仅依赖于文件扩展名。