2011-12-06 14 views
17

Estoy tratando de obtener el nombre de un objeto File sin su extensión, p. Ej. obteniendo "vegetación" cuando el nombre del archivo es "vegetation.txt". He tratado de implementar este código:¿Cómo obtener el nombre del objeto File sin su extensión en Java?

openFile = fileChooser.getSelectedFile(); 
String[] tokens = openFile.getName().split("."); 
String name = tokens[0]; 

Desafortunadamente, devuelve un objeto null. Existe un problema solo en la definición del objeto String, supongo, porque el método getName() funciona correctamente; me da el nombre del archivo con su extensión.

¿Alguna idea?

Respuesta

36

Si desea implementar esto por sí mismo, intente esto:

String name = file.getName(); 
int pos = name.lastIndexOf("."); 
if (pos > 0) { 
    name = name.substring(0, pos); 
} 

(Esta variación doesn' t dejo con una cadena vacía para un nombre de archivo de entrada como ".txt". Si desea que la cadena a estar vacío, en ese caso, cambie > 0 a >= 0.)


podría reemplazar el if instrucción con una asignación que utiliza una expresión condicional, si crees que hizo que tu código sea más legible; ver la respuesta de @ Steven, por ejemplo. (No creo que lo hace ... pero es una cuestión de opinión.)


Podría decirse que es una idea mejor utilizar una implementación que alguien más ha escrito y probado. Apache FilenameUtils es una buena opción; vea la respuesta de @ slachnick, y también la Q vinculada & A.

+0

Muchas gracias por resolver mi problema :) – MichalB

4

Prefiero cortar antes del último índice de "." ser el nombre del archivo De esta manera un nombre de archivo: hello.test.txt es sólo hello.test

decir

int pos = filename.lastIndexOf("."); 
String justName = pos > 0 ? filename.substring(0, pos) : filename; 

Es necesario manejar ya que no hay extensión también.

2

Puedes probar split("\\.");. Es decir, básicamente se escapa del . ya que se trata como todos los caracteres en expresiones regulares.

2

Hay dos problemas con su código ...

1) Sólo usando "" como un argumento para dividir se interpreta como un Rejex que no quieres. Quieres un punto literal Así que hay que escapar de ella ...

openFile.getName().split("\\."); 

2) Va a analizar de forma incorrecta cualquier archivo con más de un punto. La mejor manera de hacer esto es buscar el último punto y obtener la subcadena ...

int pos = openFile.getName().lastIndexOf("."); 
if(pos != -1) { 
    String name = openFile.getName().substring(0, pos); 
} 
17

Si no desea escribir este código usted mismo, podría usar Apache's FilenameUtils.

FilenameUtils.getBaseName(openFile.getName()); 

Esto devolverá el nombre de archivo menos la ruta y la extensión.

Cuestiones relacionadas