2012-07-22 21 views
6

¿Cómo obtengo la extensión de archivo en Java sin usar ese tonto lastIndexOf('.') etc.?Java obteniendo la extensión de archivo sin subcadena

+0

posible duplicado de [¿Cómo recortar una extensión de archivo de una cadena en Java?] (Http://stackoverflow.com/questions/ 941272/how-do-i-trim-a-file-extension-from-a-string-in-java) – pb2q

+0

posible no. Cualquier solución está usando lastIndexOf – Yoda

+1

Un poco de información sobre por qué 'lastindexof' no es lo que quiere o no le sirve a usted - seguro que sé que este enfoque también tiene problemas, pero un poco de comprensión de por qué usted buscar otro enfoque podría ayudar. – MadProgrammer

Respuesta

15

La biblioteca de Apache Commons tiene FilenameUtils.getExtension().

Puede consultar la fuente que comienza here y FilenameUtils.

Al menos revise su implementación. Es bastante simple, que manejan dir.ext/archivo correctamente, y para manejar algo así como fichero.tar.gz se necesita un caso especial, si se desea extraer .tar.gz en lugar de sólo . gz.

+3

He interpretado que él quería la extensión del archivo en sí, no el nombre sin la extensión. Todavía hay un método para eso ('getExtension'), pero lee lo que hace: *" devuelve la parte textual del nombre del archivo después del último punto ". * Eso es exactamente lo que ya está haciendo; no tiene sentido agregar una biblioteca/dependencia completa solo para la misma funcionalidad (a menos que ya esté usando Apache Commons). –

+0

@JonathanNewmuis gracias, tienes razón. corregido – pb2q

+0

@JonathanNewmuis es decir, a la derecha sobre mi mezcla de métodos. Creo que la implementación de 'getExtension' es un poco más completa que simplemente envolviendo un' lastIndexOf', por razones que sus propias direcciones de respuesta, y p. _dir.ext/file_. – pb2q

2

Esa es probablemente la forma más fácil (también tenga en cuenta que, según el contexto, no es necesariamente correcto, por ejemplo, ".tar.gz").

También podría split cadena basada en el carácter . y tomar la última pieza, pero eso parece igual de difícil.

¿Hay alguna razón en particular por la cual está tratando de evitar substring y lastIndexOf?

1

¿No desea incluir bibliotecas externas? Utilizar expresiones regulares:

String extension = filename.replaceAll("^.*\\.([^.]+)$", "$1"); 
0

Con guava

Files.getFileExtension("some.txt")

+1

Me temo que no existe tal método en [jdk8] (http://docs.oracle.com/javase/8/docs/ api/java/nio/file/Files.html), supongo que te refieres a la [guava] de google (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/Files. html # getFileExtension% 28java.lang.String% 29) – A4L

+0

@ A4L gracias por señalar esto, me confundí con el paquete java.lang de esta clase ☺ – Entea

Cuestiones relacionadas