Antworten:
Verwenden Sie File
die 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 lastIndexOf
oder 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 FilenameUtils
Klasse verwenden, um den Namen aus dem Ergebnis, der Verwendung lastIndexOf
usw. zu ermitteln.
lastIndexOf
, nur verwenden file.getParentFile().getName()
.
null
(wenn Sie eine File
Instanz 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 File
Instanz 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 -2
zeigt 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.java
wahrscheinlich nicht einmal auf dem Computer vorhanden, auf dem das Programm ausgeführt wird. Es ist die kompilierte.class
Datei, die ausgeführt wird. Dies funktioniert also nur, wenn Sie wissen, woddd
sich der Standort befindet. In diesem Fall macht es keinen Sinn, ihn programmgesteuert zu finden. nur hart codieren.