【问题标题】:android filename from uri is not the same as actual filename来自uri的android文件名与实际文件名不同
【发布时间】:2018-02-14 01:38:00
【问题描述】:

我需要获取我需要上传的文件的名称和扩展名。我让用户使用 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/文件名:354

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

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

【问题讨论】:

  • 然后使用ContentResolver API

标签: android file uri


【解决方案1】:

您可以使用 MediaStore 类来获取用户看到的文件名。具体使用MediaColumns接口如下图

String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME};
        ContentResolver cr = mctx.getContentResolver();
        Cursor metaCursor = cr.query(uri[0], projection, null, null, null);
        if (metaCursor != null) {
            try {
                if (metaCursor.moveToFirst()) {
                    realFileName = metaCursor.getString(0);
                }
            } finally {
                metaCursor.close();
            }
        }

【讨论】:

    【解决方案2】:

    但结果如下

    getPath() 在带有content 方案的Uri 上毫无意义。 getPath()Uri 上没有file 以外的任何方案的意义。

    文件名甚至不是 354

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

    如何获取磁盘上的文件名/扩展名?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2016-08-16
      • 1970-01-01
      • 2014-04-06
      • 2012-10-18
      • 1970-01-01
      • 2017-12-16
      相关资源
      最近更新 更多