Trata-se de um arquivo genérico ou você está tentando obter o diretório pai do arquivo de origem? Neste último caso, não tenho certeza se você entende a compilação Java. Em tempo de execução, test.javaprovavelmente nem existirá no computador onde o programa está sendo executado. É o .classarquivo compilado que é executado. Portanto, isso só funcionará se você souber onde dddestá localizado; nesse caso, não há motivo para encontrá-lo programaticamente; apenas codifique-o.
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() :
Existem várias variantes para reter / eliminar o prefixo e o separador final. Você pode usar a mesma FilenameUtilsclasse para obter o nome do resultado, usar lastIndexOf, etc.
Isso gera ArrayOutOfBoundsException se você já estiver no local da raiz - "/" -
Jnmgr
2
File file =newFile("C:/aaa/bbb/ccc/ddd/test.java");File curentPath =newFile(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;
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.Respostas:
Use
File
ogetParentFile()
método de eString.lastIndexOf()
para recuperar apenas o diretório pai imediato.O comentário de Mark é uma solução melhor do que
lastIndexOf()
: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
). QuandogetParentFile()
for null, você precisará recorrer ao usolastIndexOf
, ou usar algo como o Apache Commons 'FileNameUtils.getFullPath()
: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, usarlastIndexOf
, etc.fonte
lastIndexOf
, apenas usefile.getParentFile().getName()
.null
(se você criou umaFile
instância com caminho relativo) - tentefile.getAbsoluteFile().getParentFile().getName()
.f.getParentFile()
pode ser nulo, então você deve verificar.fonte
Use abaixo,
fonte
No Java 7, você tem a nova API Paths . A solução moderna e mais limpa é:
O resultado seria:
fonte
Se você tiver apenas o caminho String e não quiser criar um novo objeto File, poderá usar algo como:
fonte
se precisar anexar a pasta "ddd" por outro caminho, use;
fonte
Do java 7, eu preferiria usar o Path. Você só precisa colocar o caminho em:
e crie algum método get:
fonte
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: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
fonte
fonte