Risposte:
Usa File
il 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 lastIndexOf
o 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 FilenameUtils
classe per prendere il nome dal risultato, usare lastIndexOf
, ecc.
lastIndexOf
, basta usare file.getParentFile().getName()
.
null
(se hai creato File
un'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 File
un'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 -2
punterà 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.java
probabilmente non esisterà nemmeno sul computer in cui viene eseguito il programma. È il.class
file compilato che viene eseguito. Quindi questo funzionerà solo se sai doveddd
si trova, nel qual caso non ha senso trovarlo programmaticamente; basta codificarlo.