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));