Respostas:
Use File
o getParentFile()
método de e String.lastIndexOf()
para recuperar apenas o diretório pai imediato.
O comentário de Mark é uma solução melhor do que lastIndexOf()
:
file.getParentFile().getName();
Essas soluções só funcionam se o arquivo tiver um arquivo pai (por exemplo, criado por meio de um dos construtores de arquivo usando um pai File
). Quando getParentFile()
for null, você precisará recorrer ao uso lastIndexOf
, ou usar algo como o Apache Commons 'FileNameUtils.getFullPath()
:
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Existem várias variantes para reter / eliminar o prefixo e o separador final. Você pode usar a mesma FilenameUtils
classe para obter o nome do resultado, usar lastIndexOf
, etc.
lastIndexOf
, apenas use file.getParentFile().getName()
.
null
(se você criou uma File
instância com caminho relativo) - tente file.getAbsoluteFile().getParentFile().getName()
.
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile()
pode ser nulo, então você deve verificar.
Use abaixo,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Se você tiver apenas o caminho String e não quiser criar um novo objeto File, poderá usar algo como:
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"
se precisar anexar a pasta "ddd" por outro caminho, use;
String currentFolder= "/" + currentPath.getName().toString();
Do java 7, eu preferiria usar o Path. Você só precisa colocar o caminho em:
Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");
e crie algum método get:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
Em Groovy:
Não há necessidade de criar uma File
instância para analisar a string no groovy. Isso pode ser feito da seguinte forma:
String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2] // this will return ddd
A divisão criará a matriz [C:, aaa, bbb, ccc, ddd, test.java]
e o índice -2
apontará para a entrada antes da última, que neste caso éddd
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.java
provavelmente nem existirá no computador onde o programa está sendo executado. É o.class
arquivo compilado que é executado. Portanto, isso só funcionará se você souber ondeddd
está localizado; nesse caso, não há motivo para encontrá-lo programaticamente; apenas codifique-o.