我想获取我使用Intent.ACTION_OPEN_DOCUMENT选择的文件的文件扩展名。如何获得它?
这就是我启动选择器的方式:
private void startFilePicker(){
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, CODE_ACTION_OPEN_DOCUMENT_FILE);
}
这是挑选文件时的回调:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//region New Picker
if (requestCode == CODE_ACTION_OPEN_DOCUMENT_FILE){
if (resultCode == RESULT_OK){
if (data != null){
if (data.getData() != null){
Uri uri = data.getData();
//Get file extension here.
}
}
}
}
}
当我尝试通过uri.getPath()
获取文件路径时,我会得到类似image:105571
或acc=1;doc=9204
的内容。所以我无法从路径中得到它。
问题是如何确定所选文件的文件扩展名?
答案 0 :(得分:3)
创建这两种方法......
public String getPath(Context context, Uri uri) throws URISyntaxException {
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = { "_data" };
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow("_data");
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
// Eat it
}
}
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
public String getFileExtension(String filePath){
String extension = "";
try{
extension = filePath.substring(filePath.lastIndexOf("."));
}catch(Exception exception){
e("Err", exception.toString()+"");
}
return extension;
}
然后使用这个..
if (data.getData() != null){
try{
Uri uri = data.getData();
//Get file extension here.
String filePath = getPath(YourActivity.this, uri);
String fileExtension = getFileExtension(filePath);
File file = new File(filePath);
}catch(Exception e){
e("Err", e.toString()+"");
}
}
答案 1 :(得分:0)
调用内容解析程序并在uri上执行查询()以获取显示名称。
所有带路径,获取路径或从uri获得真实路径的解决方案都是牛市。
答案 2 :(得分:0)
您可以使用此方法:
public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(extension);
}
return type;
}