Réponses:
Utilisez Filela 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 FilenameUtilsclasse pour récupérer le nom du résultat, utiliser lastIndexOf, etc.
lastIndexOf, utilisez simplement file.getParentFile().getName().
null(si vous avez créé une Fileinstance 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 Fileinstance 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 -2pointera 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.javail n'existera probablement même pas sur l'ordinateur sur lequel le programme est exécuté. C'est le.classfichier compilé qui est exécuté. Donc, cela ne fonctionnera que si vous savez oùdddse trouve, auquel cas il ne sert à rien de le trouver par programme; codez-le simplement en dur.