java - rutas - Cómo obtener solo el nombre del directorio principal de un archivo específico
obtener el nombre de un archivo en java (8)
Desde java 7 preferiría usar Path. Solo necesitas poner la ruta en:
Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");
y crea algún método get:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
Cómo obtener ddd
del nombre de ruta donde reside el test.java.
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
En Java 7 tienes la nueva api Paths. La solución más moderna y limpia es:
Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();
Si solo tiene String path y no desea crear un nuevo objeto File, puede usar algo como:
public static String getParentDirPath(String fileOrDirPath) {
boolean endsWithSlash = fileOrDirPath.endsWith(File.separator);
return fileOrDirPath.substring(0, fileOrDirPath.lastIndexOf(File.separatorChar,
endsWithSlash ? fileOrDirPath.length() - 2 : fileOrDirPath.length() - 1));
}
Use debajo,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Utilice el método String.lastIndexOf()
y String.lastIndexOf()
para recuperar solo el directorio primario inmediato.
El comentario de Mark es una mejor solución que lastIndexOf()
:
file.getParentFile().getName();
Estas soluciones solo funcionan si el archivo tiene un archivo principal (por ejemplo, creado a través de uno de los constructores de archivos que toman un File
principal). Cuando getParentFile()
es nulo, necesitará recurrir a lastIndexOf
o usar algo como Apache Commons '' FileNameUtils.getFullPath()
:
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Hay varias variantes para retener / soltar el prefijo y el separador final. Puede usar la misma clase FilenameUtils
para tomar el nombre del resultado, usar lastIndexOf
, etc.
En Groovy:
No es necesario crear una instancia de File
para analizar la cadena en groovy. Se puede hacer de la siguiente manera:
String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split(''/'')[-2] // this will return ddd
La división creará la matriz [C:, aaa, bbb, ccc, ddd, test.java]
y el índice -2
apuntará a la entrada antes de la última, que en este caso es ddd
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile()
puede ser nulo, por lo que debe verificarlo.
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
File curentPath = new File(file.getParent());
//get current path "C:/aaa/bbb/ccc/ddd/"
String currentFolder= currentPath.getName().toString();
//get name of file to string "ddd"
si necesita anexar la carpeta "ddd" por otra ruta, use;
String currentFolder= "/" + currentPath.getName().toString();