来自uri的android文件名与实际文件名不同

时间:2017-09-05 17:24:55

标签: android file uri

我需要获取需要上传的文件的名称和扩展名。我让用户使用Intent调用选择文件,并按如下方式获取URI:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
/* stuff */
Uri uri = data.getData();
String filePath = data.getData().getPath();
Log.d("filePath ",filePath);
Log.d("URI ", uri.toString());
String fileName = (new File(filePath)).getName();
Log.d("fileName ",fileName);

但结果如下:

  

com.blah.blah D / URI:content://com.android.providers.downloads.documents/document/354
  com.blah.blah D / filePath:/ document / 354
  com.blah.blah D / fileName:354

文件的名称甚至不是354!它是一个PDF文件(例如“Bus e-Ticket.pdf”或“Xender.apk”)

String fileName = (new File(filePath)).getAbsolutePath(); 也产生相同的结果。 如何在磁盘上获取文件名/ exstension?

2 个答案:

答案 0 :(得分:2)

您需要使用内容解析器来实现这一点,之前已在此处得到解答:https://stackoverflow.com/a/12473985/6531461

答案 1 :(得分:2)

  

但结果如下

getPath() Uri计划{p> content毫无意义。对于除getPath()以外的任何方案,Uri file毫无意义。

  

该文件的名称不是354

不要求有文件。 https://stackoverflow.com/questions/46060367/android-filename-from-uri-is-not-the-same-as-actual-filenameUri,我相信路径/questions/46060367/android-filename-from-uri-is-not-the-same-as-actual-filename上的Stack Overflow服务器上没有文件。

  

如何在磁盘上获取文件名/ exstension?

不要求用户选择某个文件。您可以使用DocumentFile.fromSingleUri()getName()来获取"显示名称"对于Uri标识的内容。这不一定是带扩展名的文件名。