Risposte:
Usa Fileil getParentFile()metodo e String.lastIndexOf()per recuperare solo la directory principale immediata.
Il commento di Marco è una soluzione migliore di lastIndexOf():
file.getParentFile().getName();
Queste soluzioni funzionano solo se il file ha un file genitore (ad esempio, creato tramite uno dei costruttori di file che prendono un genitore File). Quando getParentFile()è null dovrai ricorrere all'uso lastIndexOfo utilizzare qualcosa come Apache CommonsFileNameUtils.getFullPath() :
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Esistono diverse varianti per mantenere / eliminare il prefisso e il separatore finale. Puoi usare la stessa FilenameUtilsclasse per prendere il nome dal risultato, usare lastIndexOf, ecc.
lastIndexOf, basta usare file.getParentFile().getName().
null(se hai creato Fileun'istanza con percorso relativo), prova file.getAbsoluteFile().getParentFile().getName().
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile() può essere nullo, quindi dovresti controllarlo.
Usa sotto,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Se hai solo il percorso String e non vuoi creare un nuovo oggetto File puoi usare qualcosa come:
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"
se devi aggiungere la cartella "ddd" con un altro percorso usa;
String currentFolder= "/" + currentPath.getName().toString();
Da java 7 preferirei usare Path. Hai solo bisogno di inserire il percorso in:
Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");
e crea un metodo get:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
In Groovy:
Non è necessario creare Fileun'istanza per analizzare la stringa in groovy. Può essere fatto come segue:
String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2] // this will return ddd
La divisione creerà l'array [C:, aaa, bbb, ccc, ddd, test.java]e l'indice -2punterà alla voce prima dell'ultima, che in questo caso èddd
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.javaprobabilmente non esisterà nemmeno sul computer in cui viene eseguito il programma. È il.classfile compilato che viene eseguito. Quindi questo funzionerà solo se sai dovedddsi trova, nel qual caso non ha senso trovarlo programmaticamente; basta codificarlo.