Réponses:
Utilisez File
la getParentFile()
méthode de et String.lastIndexOf()
pour récupérer uniquement 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 (par exemple, créé via l'un des constructeurs de fichiers prenant un parent File
). Quand getParentFile()
est null, vous devrez recourir à l'utilisation 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 de fin. Vous pouvez soit utiliser la même FilenameUtils
classe pour récupérer le nom du résultat, utiliser lastIndexOf
, etc.
lastIndexOf
, utilisez simplement file.getParentFile().getName()
.
null
(si vous avez créé une File
instance avec un chemin relatif) - essayez file.getAbsoluteFile().getParentFile().getName()
.
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile()
peut être nul, vous devriez donc le vérifier.
Utilisez ci-dessous,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Si vous n'avez que le chemin String et que vous 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));
}
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();
De java 7, je préférerais utiliser Path. Il vous suffit de mettre le chemin dans:
Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");
et créez une méthode get:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
Dans Groovy:
Il n'est pas nécessaire de créer une File
instance 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
Le fractionnement créera le tableau [C:, aaa, bbb, ccc, ddd, test.java]
et l'index -2
pointera vers l'entrée avant le dernier, qui dans ce cas estddd
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.java
il n'existera probablement même pas sur l'ordinateur sur lequel le programme est exécuté. C'est le.class
fichier compilé qui est exécuté. Donc, cela ne fonctionnera que si vous savez oùddd
se trouve, auquel cas il ne sert à rien de le trouver par programme; codez-le simplement en dur.