568 votes

Comment puis-je obtenir l'extension de fichier d'un fichier en Java?

Juste pour être clair, je ne suis pas à la recherche pour le type MIME.

Disons que j'ai les suivantes: /path/to/file/foo.txt

Je voudrais un moyen de briser cette entrée, précisément en .txt pour l'extension. Est-il intégré dans la façon de le faire en Java? Je voudrais éviter d'écrire mon propre analyseur.

741voto

Juan Rojas Points 1506

Dans ce cas, utilisez FilenameUtils.getExtension de Apache Commons IO

Voici un exemple d'utilisation:

String ext = FilenameUtils.getExtension("/path/to/file/foo.txt");

371voto

EboMike Points 39257

Avez-vous vraiment besoin d'un "parser" pour cela?

String extension = "";

int i = fileName.lastIndexOf('.');
if (i > 0) {
    extension = fileName.substring(i+1);
}

En supposant que vous avez affaire à de simples Fenêtres, les noms de fichier, et non pas quelque chose comme archive.tar.gz.

Btw, pour le cas que d'un répertoire peut avoir un '.', mais le nom lui-même n'a pas (comme /path/to.a/file), vous pouvez le faire

String extension = "";

int i = fileName.lastIndexOf('.');
int p = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));

if (i > p) {
    extension = fileName.substring(i+1);
}

111voto

lukasz1985 Points 463
private String getFileExtension(File file) {
    String name = file.getName();
    int lastIndexOf = name.lastIndexOf(".");
    if (lastIndexOf == -1) {
        return ""; // empty extension
    }
    return name.substring(lastIndexOf);
}

88voto

JeanValjean Points 3518

Si vous utilisez la Goyave de la bibliothèque, vous pouvez recourir à l' Files classe utilitaire. Il a une méthode spécifique, getFileExtension(). Par exemple:

String path = "c:/path/to/file/foo.txt";
String ext = Files.getFileExtension(path);
System.out.println(ext); //prints txt

En outre, vous pouvez également obtenir le nom de fichier avec une fonction similaire:

String filename = Files.getNameWithoutExtension(path);
System.out.println(filename); //prints foo

16voto

Sylvain Leroux Points 9401

Afin de prendre en compte les noms de fichiers sans caractères avant le point, vous devez utiliser qu'une légère variation de la accepté de répondre:

String extension = "";

int i = fileName.lastIndexOf('.');
if (i >= 0) {
    extension = fileName.substring(i+1);
}

"file.doc" => "doc"
"file.doc.gz" => "gz"
".doc" => "doc"

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