我需要获取需要上传的文件的名称和扩展名。我让用户使用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?
答案 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-filename
是Uri
,我相信路径/questions/46060367/android-filename-from-uri-is-not-the-same-as-actual-filename
上的Stack Overflow服务器上没有文件。
如何在磁盘上获取文件名/ exstension?
不要求用户选择某个文件。您可以使用DocumentFile.fromSingleUri()
和getName()
来获取"显示名称"对于Uri
标识的内容。这不一定是带扩展名的文件名。