Cómo obtener la extensión de archivo de un archivo en Java

1. Información general

En este tutorial rápido, mostraremos cómo obtener la extensión de archivo mediante programación en Java. Nos centraremos en tres enfoques principales del problema.

En nuestras implementaciones, los caracteres después del ' .' Final Será devuelto.

Por lo tanto, como un ejemplo rápido, si nuestro nombre de archivo es jarvis.txt , devolverá la cadena " txt" como la extensión del archivo.

2. Obtener la extensión del archivo

Para cada enfoque, aprenderemos cómo implementarlo y daremos seguimiento a lo que sucede en dos casos especiales:

  • cuando un nombre de archivo no tiene extensiones, como un archivo Makefile
  • y si un nombre de archivo consta solo de la extensión, como .gitignore o .DS_Store.

2.1. Enfoque simple de manipulación de cuerdas

Con este enfoque, usaremos un enfoque de manejo de cadenas simple para encontrar la extensión:

public Optional getExtensionByStringHandling(String filename) { return Optional.ofNullable(filename) .filter(f -> f.contains(".")) .map(f -> f.substring(filename.lastIndexOf(".") + 1)); } 

Este método buscará el punto '.' ocurrencia en el nombre de archivo dado.

Si existe, buscará la última posición del punto '.' y devolver los caracteres después de eso, los caracteres después del último punto '.' conocido como la extensión del archivo.

Casos especiales:

  1. Sin extensión : este método devolverá una cadena vacía
  2. Solo extensión : este método devolverá la cadena después del punto, por ejemplo, "gitignore"

2.2. FilenameUtils.getExtension de Apache Commons IO

En el segundo enfoque, encontraremos la extensión utilizando una clase de utilidad proporcionada por la biblioteca IO de Apache Commons:

public String getExtensionByApacheCommonLib(String filename) { return FilenameUtils.getExtension(filename); }

Aquí, en lugar del nombre del archivo, también podemos especificar la ruta completa a un archivo, por ejemplo, " C: /baeldung/com/demo.java ".

El método getExtension (String) comprobará si el nombre de archivo dado está vacío o no.

Si el nombre del archivo está vacío o es nulo, getExtension (String filename) devolverá la instancia que se le dio. De lo contrario, devuelve la extensión del nombre del archivo.

Para hacer esto, usa el método indexOfExtension (String) que, a su vez, usa lastIndexof (char) para encontrar la última aparición del '.'. Ambos métodos los proporciona FilenameUtils .

Este método también verifica que no haya un separador de directorio después del último punto usando otro método indexOfLastSeparator (String), que manejará un archivo en formato Unix o Windows.

Casos especiales:

  1. Sin extensión : este método devolverá una cadena vacía.
  2. Solo extensión : este método devolverá la cadena después del punto, por ejemplo, "gitignore"

2.3. Usando la biblioteca de Guava

En este último enfoque, usaremos la biblioteca Guava para encontrar la extensión.

Para agregar una biblioteca de Guava, podemos agregar la siguiente dependencia a nuestro pom.xml:

 com.google.guava guava 24.1.1-jre 

Para conocer la dependencia más reciente, podemos consultar Maven Central.

Después de agregar la biblioteca, simplemente podemos usar su método getFileExtension :

public String getExtensionByGuava(String filename) { return Files.getFileExtension(filename); } 

El método getFileExtension (String) primero verificará si el nombre de archivo dado está vacío.

Si el nombre de archivo no está vacío, entonces creará una instancia de Archivo convirtiendo el nombre de archivo dado en un nombre de ruta abstracto y llamará al método getName () de File sobre él, que devolverá el nombre del archivo indicado por este nombre de ruta abstracto, o el cadena vacía si el nombre de archivo dado está vacío.

Based upon this return value it fetches the index of the last occurrence of the ‘.' by using String class inbuilt method lastIndexOf(char).

Special Cases:

  1. No extension – this method will return an empty String
  2. Only extension – this method will return the String after the dot, e.g. “gitignore”

3. Conclusion

When picking between Apache Commons and Guava, while both libraries have some common features and they also have functionality that's absent from their alternative.

Esto significa que si se requiere cierta funcionalidad, elija la que la tenga. De lo contrario, si se requieren más escenarios personalizados, elija el que haga más de lo que necesita y siéntase libre de envolverlo con su propia implementación para obtener el resultado deseado.

Además, consulte todos los ejemplos de este artículo sobre Github.