type ruta obtener nombre full completa archivo java file filenames filepath

java - nombre - obtener ruta de input file jquery



¿Cómo obtengo el nombre de archivo de una cadena que contiene la ruta del archivo absoluto? (10)

Alternativa usando Path (Java 7+):

Path p = Paths.get("C://Hello//AnotherFolder//The File Name.PDF"); String file = p.getFileName().toString();

Tenga en cuenta que dividir la cadena en // depende de la plataforma, ya que el separador de archivos puede variar. Path#getName se ocupa de ese problema por usted.

String variable de String contiene un nombre de archivo, C:/Hello/AnotherFolder/The File Name.PDF . ¿Cómo solo obtengo el nombre de archivo The File Name.PDF como una cadena?

Planeé dividir la cadena, pero esa no es la solución óptima.


Considere el caso de que Java es Multiplataforma:

int lastPath = fileName.lastIndexOf(File.separator); if (lastPath!=-1){ fileName = fileName.substring(lastPath+1); }


Desde 1.7

Path p = Paths.get("c://temp//1.txt"); String fileName = p.getFileName().toString(); String directory = p.getParent().toString();


Las otras respuestas no funcionaron para mi escenario específico, donde estoy leyendo rutas que se han originado a partir de un sistema operativo diferente al actual. Para elaborar estoy guardando archivos adjuntos de correo electrónico guardados desde una plataforma de Windows en un servidor Linux. El nombre de archivo devuelto por la API de JavaMail es algo así como ''C: / temp / hello.xls''

La solución con la que terminé:

String filenameWithPath = "C://temp//hello.xls"; String[] tokens = filenameWithPath.split("[////|/]"); String filename = tokens[tokens.length - 1];


Teniendo en cuenta que la String que está preguntando es

C:/Hello/AnotherFolder/The File Name.PDF

tenemos que extraer todo después del último separador, es decir. / . Eso es lo que nos interesa.

Tu puedes hacer

String fullPath = "C://Hello//AnotherFolder//The File Name.PDF"; int index = fullPath.lastIndexOf("//"); String fileName = fullPath.substring(index + 1);

Esto recuperará el índice de la última / en su String y extraerá todo lo que viene después en fileName .

Si tiene un String con un separador diferente, ajuste el lastIndexOf para usar ese separador. (Incluso hay una overload que acepta un String completo como separador).

Lo he omitido en el ejemplo anterior, pero si no está seguro de dónde proviene el String o lo que podría contener, querrá validar que el lastIndexOf devuelve un valor no negativo porque el overload que devolverá

-1 si no hay tal ocurrencia


Un método sin ninguna dependencia y se ocupa de ... , . y separadores duplicados.

public static String getFileName(String filePath) { if( filePath==null || filePath.length()==0 ) return ""; filePath = filePath.replaceAll("[/////]+", "/"); int len = filePath.length(), upCount = 0; while( len>0 ) { //remove trailing separator if( filePath.charAt(len-1)==''/'' ) { len--; if( len==0 ) return ""; } int lastInd = filePath.lastIndexOf(''/'', len-1); String fileName = filePath.substring(lastInd+1, len); if( fileName.equals(".") ) { len--; } else if( fileName.equals("..") ) { len -= 2; upCount++; } else { if( upCount==0 ) return fileName; upCount--; len -= fileName.length(); } } return ""; }

Caso de prueba:

@Test public void testGetFileName() { assertEquals("", getFileName("/")); assertEquals("", getFileName("////")); assertEquals("", getFileName("//C//.//../")); assertEquals("", getFileName("C//.//../")); assertEquals("C", getFileName("C")); assertEquals("C", getFileName("/C")); assertEquals("C", getFileName("/C/")); assertEquals("C", getFileName("//C//")); assertEquals("C", getFileName("/A/B/C/")); assertEquals("C", getFileName("/A/B/C")); assertEquals("C", getFileName("/C/./B/../")); assertEquals("C", getFileName("//C//./B//..///")); assertEquals("user", getFileName("/user/java/..")); assertEquals("C:", getFileName("C:")); assertEquals("C:", getFileName("/C:")); assertEquals("java", getFileName("C://Program Files (x86)//java//bin//..")); assertEquals("C.ext", getFileName("/A/B/C.ext")); assertEquals("C.ext", getFileName("C.ext")); }

Tal vez getFileName es un poco confuso, porque también devuelve nombres de directorio. Devuelve el nombre del archivo o último directorio en una ruta.


Usando FilenameUtils en Apache Commons IO :

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


extraer el nombre del archivo usando java regex *.

public String extractFileName(String fullPathFile){ try { Pattern regex = Pattern.compile("([^/////:*?/"<>|/r/n]+$)"); Matcher regexMatcher = regex.matcher(fullPathFile); if (regexMatcher.find()){ return regexMatcher.group(1); } } catch (PatternSyntaxException ex) { LOG.info("extractFileName::pattern problem <"+fullPathFile+">",ex); } return fullPathFile; }


puede usar path = C: / Hello / AnotherFolder / TheFileName.PDF

String strPath = path.substring(path.lastIndexOf("//")+1, path.length());


solo use File.getName()

File f = new File("C://Hello//AnotherFolder//The File Name.PDF"); System.out.println(f.getName());

usando métodos de Cadena :

File f = new File("C://Hello//AnotherFolder//The File Name.PDF"); System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("//")+1));