2017-09-05 2 views
0

Je dois obtenir le nom et l'extension d'un fichier que j'ai besoin de télécharger. Je laisse l'utilisateur de sélectionner le fichier à l'aide d'un appel et obtenir l'intention URI comme suit:nom de fichier android de uri n'est pas le même que le nom de fichier réel

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); 

mais les résultats sont les suivants:

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

le nom de le fichier n'est même pas 3 54! c'est un fichier PDF (par exemple "Bus e-Ticket.pdf" ou "Xender.apk")

String fileName = (new File(filePath)).getAbsolutePath(); donne également le même. comment puis-je obtenir le nom de fichier/exstension sur le disque?

+1

puis utilisez l'API 'ContentResolver' – pskink

Répondre

1

mais les résultats sont les suivants

getPath() est inutile sur un Uri avec content schéma. getPath() est inutile sur un Uri avec un schéma autre que file.

le nom du fichier est même pas 354

Il n'y a pas nécessaire qu'il y ait un fichier. https://stackoverflow.com/questions/46060367/android-filename-from-uri-is-not-the-same-as-actual-filename est un Uri, et je suis assez confiant qu'il n'y a pas de fichier sur un serveur Stack Overflow sur le chemin /questions/46060367/android-filename-from-uri-is-not-the-same-as-actual-filename.

comment puis-je obtenir le nom de fichier/exstension sur le disque?

Il n'y a aucune exigence que l'utilisateur choisisse quelque chose qui est un fichier. Vous pouvez utiliser DocumentFile.fromSingleUri() et getName() pour obtenir un "nom d'affichage" pour le contenu identifié par le Uri. Cela ne doit pas être un nom de fichier avec une extension.