Acceder

Ver la Versión Completa : No mostrar la extensión de un archivo


Marciano Verde
12/09/13, 13:10:15
¿Como haceis para mostrar un nombre de un archivo sin su extensión?

Con "MiFichero[i].getName()" me da el nombre con la extensión.

He intentado (y conseguido) eliminarla con "MiFichero[i].getName().substring(0,(MiFichero[i].getName().length()-4)))" pero me horroriza lo larga que ha quedado la frase, además que la extensión no tiene porque tener siempre tamaño 4...

¿no hay una forma automática de hacerlo?, ¿o más fácil?.

EDITO:
Al final lo del tamaño variable de la extensión lo he resuelto con:
MiFichero[i].getName().substring(0,(MiFichero[i].getName().lastIndexOf(".")))
pero sigo preguntando si no hay algún método más sencillo.

mocelet
12/09/13, 14:32:13
En el API de Android no hay nada, la solución que propones sirve solo si el fichero tiene extensión. Si no tiene extensión el lastIndexOf devuelve -1 y el substring (0,-1) te dará un error.

Si es para ficheros generados por tu propia app y sabes que van a tener el punto, no vas a encontrar nada que ocupe menos.

En stackoverflow alguien recomendaba usar la biblioteca Apache Commons I/O http://stackoverflow.com/questions/941272/how-do-i-trim-a-file-extension-from-a-string-in-java que tiene un método removeExtension y parece interesante si quisieras una solución totalmente genérica y a prueba de errores.

hecsagis
12/09/13, 15:05:36
Igual te sirve:

MiFichero[i].getName().split(".")[0];

Si tiene extensión te la quita y te dará la primera parte, y si no la tiene te lo va a dejar igual

Creo que te funcionaría, creo que no se me escapa nada

mocelet
12/09/13, 15:09:56
Igual te sirve:

MiFichero[i].getName().split(".")[0];

Si tiene extensión te la quita y te dará la primera parte, y si no la tiene te lo va a dejar igual

Creo que te funcionaría, creo que no se me escapa nada

En el caso de que no existieran más puntos en el nombre del fichero, valdría, sí.

EDIT: Espera, que es una expresión regular! Habría que poner split("\\.")

Marciano Verde
12/09/13, 16:47:10
Gracias a los dos.

@Mocelet
No hay riesgo de que lastIndexOf retorne un -1, ya que previamente hago un if:
if (MiFichero[i].getName().endsWith(Pattern1)) {
de manera que si el archivo tiene la extención que yo quiero muestro su nombre sin extensión. Si entra al IF es que tiene extensión, y además es la que yo quiero.
Otro solución sería no hacer el lastIndexOf dentro del substring, si no, hacerlo por fuera cargando el valor retornado en una variable y si es negativo, darle el valor 0.

@hecsagis
Me gustaba tu idea, pero como dice @mocelet, valdría si no hay más puntos en el nombre, lo he estado provando y se queda con la cadena que va desde el principio hasta el primer punto.
De todas formas, ¿Para que es eso de "[0]" que pones al final?

bueno, de momento y ya que se que mi archivo tendrá extensión, me quedo con lo de:
MiFichero[i].getName().substring(0,(MiFichero[i].getName().lastIndexOf(".")))

hecsagis
12/09/13, 17:27:01
El split devuelve un array de strings que contiene todas las cadenas obtenidas tras separar por el "." en este caso.

Por ejemplo si haces un split de:

String[] separar = "esto.es.un.ejemplo".split(".");

Devolveria

separar[0] = esto
...
separar[2] = ejemplo

Marciano Verde
12/09/13, 18:07:40
Ah vale, no lo sabía, luego habría que concatenar todos esos strings menos el último y además añadir un puntito entre uno y otro.
Para este caso no me resulta interesante, pero me lo anoto para usos futuros.