Respuestas:
Utilice File
el getParentFile()
método de y String.lastIndexOf()
para recuperar solo el directorio padre 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 toma un archivo principal File
). Cuando getParentFile()
sea nulo, deberá recurrir al uso lastIndexOf
, o usar algo como Apache Commons 'FileNameUtils.getFullPath()
:
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Hay varias variantes para retener / eliminar el prefijo y el separador final. Puede usar la misma FilenameUtils
clase para tomar el nombre del resultado, usar lastIndexOf
, etc.
lastIndexOf
, solo use file.getParentFile().getName()
.
null
(si creó una File
instancia con una ruta relativa), intente file.getAbsoluteFile().getParentFile().getName()
.
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 marcarlo.
Utilice a continuación,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Si solo tiene una ruta de cadena y no desea crear un nuevo objeto de archivo, 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));
}
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 agregar la carpeta "ddd" por otra ruta, use;
String currentFolder= "/" + currentPath.getName().toString();
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 un método get:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
En Groovy:
No es necesario crear una File
instancia 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 anterior a la última, que en este caso esddd
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.java
probablemente ni siquiera exista en la computadora donde se ejecuta el programa. Es el.class
archivo compilado que se ejecuta. Así que esto solo funcionará si sabe dóndeddd
está ubicado, en cuyo caso no tiene sentido encontrarlo programáticamente; simplemente codifíquelo.