web-dev-qa-db-de.com

So erhalten Sie nur den Namen des übergeordneten Verzeichnisses einer bestimmten Datei

So erhalten Sie ddd aus dem Pfadnamen, in dem sich test.Java befindet.

File file = new File("C:/aaa/bbb/ccc/ddd/test.Java");
90
minil

Verwenden Sie Files getParentFile()-Methode und String.lastIndexOf(), um nur das unmittelbar übergeordnete Verzeichnis abzurufen. 

Marks Kommentar ist eine bessere Lösung alslastIndexOf():

file.getParentFile().getName();

Diese Lösungen funktionieren nur, wenn die Datei über eine übergeordnete Datei verfügt (z. B. über einen der Dateikonstruktoren erstellt wurde, die eine übergeordnete File verwenden). Wenn getParentFile() null ist, müssen Sie lastIndexOf verwenden oder etwas wie Apache Commons 'FileNameUtils.getFullPath() verwenden:

FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd

Es gibt verschiedene Varianten, um das Präfix und das nachfolgende Trennzeichen beizubehalten. Sie können entweder dieselbe FilenameUtils-Klasse verwenden, um den Namen aus dem Ergebnis zu ziehen, lastIndexOf verwenden, usw.

118
Dave Newton
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.

18

Verwenden Sie unten,

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
14
Ishan Liyanage

In Java 7 haben Sie die neuenpfade api . Die modernste und sauberste Lösung ist:

Paths.get("C:/aaa/bbb/ccc/ddd/test.Java").getParent().getFileName();

Ergebnis wäre:

C:/aaa/bbb/ccc/ddd
6
neves

Wenn Sie nur String-Pfad haben und kein neues File-Objekt 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));
}
4
Fedir Tsapana
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" an einen anderen Pfad anhängen müssen

String currentFolder= "/" + currentPath.getName().toString();
2
Crni03

In Groovy:

Es ist nicht erforderlich, eine File-Instanz zu erstellen, um die Zeichenfolge in groovy zu analysieren. Es kann wie folgt gemacht werden:

String path = "C:/aaa/bbb/ccc/ddd/test.Java"
path.split('/')[-2]  // this will return ddd

Der Split erstellt das Array [C:, aaa, bbb, ccc, ddd, test.Java] und der Index -2 zeigt auf den Eintrag vor dem letzten, der in diesem Fall ddd ist.

0
yamenk
    //get the parentfolder name
    File file = new File( System.getProperty("user.dir") + "/.");
    String parentPath = file.getParentFile().getName();
0
Oscar Betgen

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 einige Get-Methode erstellen:

public String getLastDirectoryName(Path directoryPath) {
   int nameCount = directoryPath.getNameCount();
   return directoryPath.getName(nameCount - 1);
}
0
Peter S.