45 votes

Comment vérifier l'extension d'un fichier sur Android

Dans mon application, lorsque nous parcourons les fichiers de la carte SD, les fichiers sont des fichiers .text, .jpg et des fichiers vidéo mpeg4ie.

Je veux stocker chaque type de fichier dans un dossier particulier. Par exemple, les fichiers .text vont dans le dossier text. Lorsque je sélectionne le fichier, comment puis-je vérifier l'extension du fichier ?

0 votes

Peut-être que cela pourrait être utile : stackoverflow.com/q/53869269/3894304

66voto

Mike Lentini Points 891

Je récupère le nom du fichier sous la forme d'une chaîne, je le divise en un tableau avec "." comme délimiteur, puis je récupère le dernier indice du tableau, qui est l'extension du fichier. Par exemple :

public class main {
    public static void main(String[] args) {
        String filename = "image.jpg";
        String filenameArray[] = filename.split("\\.");
        String extension = filenameArray[filenameArray.length-1];
        System.out.println(extension);
    }
}

Quelles sorties :

jpg

5 votes

Ce que j'essaie de faire comprendre, c'est qu'il ne faut pas utiliser d'expression régulière pour une tâche simple comme celle-ci, et non pour la vérification des erreurs.

0 votes

Que se passe-t-il si je consulte un fichier dans la galerie de mon téléphone Android, où le nom du fichier est renvoyé sous la forme "content://media/external/images/media/3669". Puis-je obtenir l'extension du nom de fichier dans ce cas ? @MikeLentini

48voto

Zaur Points 3277
public static String getFileExt(String fileName) {
    return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
}

1 votes

Pouvez-vous expliquer la partie +1 ?

5 votes

@RoCK Sans le +1, ce serait, par exemple, " .jpg " au lieu de " jpg ". Notez le point.

0 votes

Peut être simplifié comme suit : nom de fichier.sous-chaîne(nom de fichier.dernierIndexOf(".") + 1).

18voto

Pedro Points 237

Ou vous pouvez simplement le faire :

MimeTypeMap.getFileExtensionFromUrl(myfile.toURL().toString());

Note : cette méthode n'est cependant pas très fiable...

2 votes

Comme File#toURL() est déprécié, cela devrait être myfile.toURI().toURL().toString()

14voto

Phil Points 11964

Vous pouvez utiliser FilenameUtils de Apache Commons :

String extension = FilenameUtils.getExtension(mFile.getName());

4voto

Matt Points 572

Vous pouvez également faire quelque chose comme le modèle ci-dessous et utiliser endsWith.

public void walkdir(File dir) {
    String txtPattern = ".txt";
    String jpgPattern = ".jpg";
    String mp3Pattern = ".mp3";

    File listFile[] = dir.listFiles();

    if (listFile != null) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory()) {
                walkdir(listFile[i]);
            }
            else {
                if (listFile[i].getName().endsWith(txtPattern)){
                    // Put in txt folder

                } else if (listFile[i].getName().endsWith(jpgPattern.toLowerCase())){
                    // Put in jpg folder

                } else if (istFile[i].getName().endsWith(mp3Pattern.toLowerCase())) {
                    // Put in mp3 folder
                }
            }
        }
    }
}

Désolé, je n'ai pas vérifié le travail, mais ça devrait le faire pour vous.

1 votes

Extensions sensibles à la casse ? Qu'en est-il des fichiers appelés readme.TXT, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X