Pergunta

Eu tenho um String que fornece um caminho absoluto para um arquivo (incluindo o nome do arquivo). Eu quero começar apenas o nome do arquivo. Qual é a maneira mais fácil de fazer isso?

Ele precisa ser tão geral quanto possível, como eu não pode saber com antecedência o que a URL será. Eu não posso simplesmente criar um objeto de URL e uso getFile() - todos no entanto, que teria sido ideal se era possível - como não é necessariamente uma http:// prefixo poderia ser c:. / Ou algo similar

Foi útil?

Solução

new File(fileName).getName();

ou

int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
return idx >= 0 ? fileName.substring(idx + 1) : fileName;

Observe que a primeira solução é dependente do sistema. Leva apenas carácter separador de caminho do sistema em consideração. Portanto, se seu código é executado em um sistema Unix e recebe um caminho do Windows, não vai funcionar. Este é o caso quando processando o upload de arquivos que está sendo enviado por Internet Explorer.

Outras dicas

new File(absolutePath).getName();

Apache Commons IO fornece a classe FilenameUtils que lhe dá um rico conjunto muito de funções utilitárias para facilmente obtenção dos vários componentes de nomes de arquivos, embora a classe java.io.File fornece o básico.

Apache Commons IO FileNameUtils

String fileName = FilenameUtils.getName(stringNameWithPath);

Aqui estão 2 maneiras (ambas são independentes do sistema operacional.)

Usando Paths: Desde 1,7

Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();

Usando FilenameUtils no Apache Commons IO:

String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top