Cómo obtener solo el nombre del directorio principal de un archivo específico

Cómo obtener ddd del nombre de ruta donde reside el test.java.

 File file = new File("C:/aaa/bbb/ccc/ddd/test.java"); 

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.

 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.

Use debajo,

 File file = new File("file/path"); String parentPath = file.getAbsoluteFile().getParent(); 

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

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

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

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