web-dev-qa-db-fra.com

Comment obtenir uniquement le nom du répertoire parent d'un fichier spécifique

Comment obtenir ddd à partir du nom du chemin où réside le test.Java.

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

Utilisez les méthodes File 'S getParentFile() et String.lastIndexOf() pour extraire seulement le répertoire parent immédiat. 

Le commentaire de Mark est une meilleure solution que lastIndexOf():

file.getParentFile().getName();

Ces solutions ne fonctionnent que si le fichier a un fichier parent (créé par l’intermédiaire d’un des constructeurs de fichiers utilisant une variable parent File). Lorsque getParentFile() est null, vous devrez utiliser lastIndexOf ou utiliser quelque chose comme: Apache Commons 'FileNameUtils.getFullPath() :

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

Il existe plusieurs variantes pour conserver/supprimer le préfixe et le séparateur final. Vous pouvez utiliser la même classe FilenameUtils pour récupérer le nom du résultat, utilisez lastIndexOf, etc.

118
Dave Newton
File f = new File("C:/aaa/bbb/ccc/ddd/test.Java");
System.out.println(f.getParentFile().getName())

f.getParentFile() peut être null, vous devriez donc le vérifier.

18
Surasin Tancharoen

Utilisez ci-dessous,

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

En Java 7, vous avez le nouveau Paths api . La solution la plus moderne et la plus propre est:

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

Le résultat serait:

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

Si vous avez juste le chemin de chaîne et ne voulez pas créer un nouvel objet File, vous pouvez utiliser quelque chose comme

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"

si vous devez ajouter le dossier "ddd" par un autre chemin, utilisez;

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

Dans Groovy:

Il n'est pas nécessaire de créer une instance File pour analyser la chaîne dans groovy. Cela peut être fait comme suit:

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

La scission créera le tableau [C:, aaa, bbb, ccc, ddd, test.Java] et l'index -2 pointera vers l'entrée avant la dernière, qui dans ce cas est ddd

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

De Java 7, je préférerais utiliser Path. Il vous suffit de mettre chemin dans:

Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.Java");

et créer une méthode get:

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