2009-06-18 12 views
30

Tengo un String que proporciona una ruta de acceso absoluta a un archivo (incluido el nombre del archivo). Quiero obtener solo el nombre del archivo. ¿Cuál es la forma más fácil de hacer esto?Obtener el nombre de archivo de una ubicación de archivo en Java

Tiene que ser lo más general posible ya que no puedo saber con anticipación cuál será la URL. No puedo simplemente crear un objeto URL y usar getFile(), aunque eso hubiera sido ideal si fuera posible, ya que no es necesariamente un prefijo http://, podría ser c:/o algo similar.

Respuesta

78
new File(fileName).getName(); 

o

int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/"); 
return idx >= 0 ? fileName.substring(idx + 1) : fileName; 

Observe que la primera solución depende del sistema. Solo tiene en cuenta el carácter separador de ruta del sistema. Entonces, si su código se ejecuta en un sistema Unix y recibe una ruta de Windows, no funcionará. Este es el caso cuando se procesan las cargas de archivos enviadas por Internet Explorer.

+1

Ya sabe, las fechas de vencimiento del proyecto le enseñan a escribir rápido. – akarnokd

+10

El primer parámetro replaceAll es incorrecto porque la barra oblicua es un carácter de escape tanto en Java String como en expresiones regulares. Debe ser fileName.replaceAll ("\\\\", "/") ... – Ivan

+3

Además, ¿cómo se aceptó esto tantas veces a pesar del hecho de que subString no debe ser encasillado en camello y debe ser "subcadena" todo en minúscula para Alcanza el método de subcadena de la API String nativa, a menos que estés usando algo más aquí, pero eso probablemente debería tenerse en cuenta. – bcmoney

22
new File(absolutePath).getName(); 
17

Apache Commons IO proporciona la clase FilenameUtils que le da un muy amplio conjunto de funciones de utilidad para obtener fácilmente los diversos componentes de los nombres de archivo, aunque la clase java.io.File proporciona los fundamentos.

+1

Siempre úselo. No puedo quejarme –

1

Aquí hay 2 maneras (ambos son independiente del sistema operativo.)

Usando Paths: Desde 1,7

Path p = Paths.get(<Absolute Path of Linux/Windows system>); 
String fileName = p.getFileName().toString(); 
String directory = p.getParent().toString(); 

Usando FilenameUtils en Apache Commons IO:

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt"); 
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt"); 
Cuestiones relacionadas