Antworten:
Verwenden Sie Filedie getParentFile()Methode von und String.lastIndexOf(), um nur das unmittelbare übergeordnete Verzeichnis abzurufen .
Marks Kommentar ist eine bessere Lösung als lastIndexOf():
file.getParentFile().getName();
Diese Lösungen funktionieren nur, wenn die Datei eine übergeordnete Datei enthält (z. B. erstellt über einen der Dateikonstruktoren, die eine übergeordnete Datei übernehmen File). Wenn getParentFile()null ist, müssen Sie auf die Verwendung von Apache Commons zurückgreifen lastIndexOfoder Folgendes verwendenFileNameUtils.getFullPath() :
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Es gibt verschiedene Varianten, um das Präfix und das nachfolgende Trennzeichen beizubehalten / zu löschen. Sie können entweder dieselbe FilenameUtilsKlasse verwenden, um den Namen aus dem Ergebnis, der Verwendung lastIndexOfusw. zu ermitteln.
lastIndexOf, nur verwenden file.getParentFile().getName().
null(wenn Sie eine FileInstanz mit einem relativen Pfad erstellt haben) - versuchen Sie es file.getAbsoluteFile().getParentFile().getName().
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile() kann null sein, also sollten Sie es überprüfen.
Verwenden Sie unten,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Wenn Sie nur einen Zeichenfolgenpfad haben und kein neues Dateiobjekt erstellen möchten, können Sie Folgendes verwenden:
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"
Wenn Sie den Ordner "ddd" über einen anderen Pfad anhängen müssen, verwenden Sie;
String currentFolder= "/" + currentPath.getName().toString();
Ab Java 7 würde ich lieber Path verwenden. Sie müssen nur den Pfad eingeben in:
Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");
und erstellen Sie eine get-Methode:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
In Groovy:
Es ist nicht erforderlich, eine FileInstanz zu erstellen , um den String in Groovy zu analysieren. Dies kann wie folgt erfolgen:
String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2] // this will return ddd
Durch die Aufteilung wird das Array erstellt, [C:, aaa, bbb, ccc, ddd, test.java]und der Index -2zeigt auf den Eintrag vor dem letzten, in diesem Fallddd
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.javawahrscheinlich nicht einmal auf dem Computer vorhanden, auf dem das Programm ausgeführt wird. Es ist die kompilierte.classDatei, die ausgeführt wird. Dies funktioniert also nur, wenn Sie wissen, wodddsich der Standort befindet. In diesem Fall macht es keinen Sinn, ihn programmgesteuert zu finden. nur hart codieren.