Ist dies eine generische Datei oder versuchen Sie, das übergeordnete Verzeichnis Ihrer Quelldatei abzurufen? In letzterem Fall bin ich mir nicht sicher, ob Sie die Java-Kompilierung verstehen. Zur Laufzeit ist 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, wo dddsich der Standort befindet. In diesem Fall macht es keinen Sinn, ihn programmgesteuert zu finden. nur hart codieren.
Mark Peters
Antworten:
141
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() :
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.
Sie brauchen nicht lastIndexOf, nur verwenden file.getParentFile().getName().
Mark Peters
13
Nur für den Fall. Wenn es zurückkehrt null(wenn Sie eine FileInstanz mit einem relativen Pfad erstellt haben) - versuchen Sie es file.getAbsoluteFile().getParentFile().getName().
Nidu
1
@MarkPeters Das funktioniert jedoch nur, wenn die Datei mit einer übergeordneten Datei erstellt wurde, was meiner Meinung nach relativ selten vorkommt.
Dave Newton
20
File f =newFile("C:/aaa/bbb/ccc/ddd/test.java");System.out.println(f.getParentFile().getName())
f.getParentFile() kann null sein, also sollten Sie es überprüfen.
Es sei darauf hingewiesen, dass für diese Methode ein übergeordnetes Element festgelegt werden sollte, auch wenn die zugrunde liegende Datei dies nicht tat.
Pace
13
In Java 7 haben Sie die neue Paths-API . Die moderne und sauberste Lösung ist:
Dies löst ArrayOutOfBoundsException aus, wenn Sie sich bereits am Stammspeicherort befinden - "/" -
Jnmgr
2
File file =newFile("C:/aaa/bbb/ccc/ddd/test.java");File curentPath =newFile(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;
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
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.Antworten:
Verwenden Sie
File
diegetParentFile()
Methode von undString.lastIndexOf()
, um nur das unmittelbare übergeordnete Verzeichnis abzurufen .Marks Kommentar ist eine bessere Lösung als
lastIndexOf()
: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
). WenngetParentFile()
null ist, müssen Sie auf die Verwendung von Apache Commons zurückgreifenlastIndexOf
oder Folgendes verwendenFileNameUtils.getFullPath()
: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 VerwendunglastIndexOf
usw. zu ermitteln.quelle
lastIndexOf
, nur verwendenfile.getParentFile().getName()
.null
(wenn Sie eineFile
Instanz mit einem relativen Pfad erstellt haben) - versuchen Sie esfile.getAbsoluteFile().getParentFile().getName()
.f.getParentFile()
kann null sein, also sollten Sie es überprüfen.quelle
Verwenden Sie unten,
quelle
In Java 7 haben Sie die neue Paths-API . Die moderne und sauberste Lösung ist:
Ergebnis wäre:
quelle
Wenn Sie nur einen Zeichenfolgenpfad haben und kein neues Dateiobjekt erstellen möchten, können Sie Folgendes verwenden:
quelle
Wenn Sie den Ordner "ddd" über einen anderen Pfad anhängen müssen, verwenden Sie;
quelle
Ab Java 7 würde ich lieber Path verwenden. Sie müssen nur den Pfad eingeben in:
und erstellen Sie eine get-Methode:
quelle
In Groovy:
Es ist nicht erforderlich, eine
File
Instanz zu erstellen , um den String in Groovy zu analysieren. Dies kann wie folgt erfolgen: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
quelle
quelle