Em Java, dado a java.net.URL
ou a String
na forma de http://www.example.com/some/path/to/a/file.xml
, qual é a maneira mais fácil de obter o nome do arquivo, menos a extensão? Então, neste exemplo, estou procurando por algo que retorne "file"
.
Posso pensar em várias maneiras de fazer isso, mas estou procurando algo que seja fácil de ler e breve.
Respostas:
Em vez de reinventar a roda, que tal usar o Apache commons-io :
fonte
URL#getPath
eString#substring
ouPath#getFileName
ouFile#getName
).fonte
substring()
http://example.org/file#anchor
,http://example.org/file?p=foo&q=bar
nemhttp://example.org/file.xml#/p=foo&q=bar
String url = new URL(original_url).getPath()
e adicionar um caso especial para nomes de arquivos que não contenham um.
, isso funcionará bem.Se você não precisar se livrar da extensão do arquivo, aqui está uma maneira de fazê-lo sem recorrer à manipulação de String propensa a erros e sem usar bibliotecas externas. Funciona com Java 1.7+:
fonte
URI.getPath()
retorna umString
, então eu não vejo por que ele não iria funcionargetPath
e usar a sobrecarga de URI.Paths.get(new URI(url))
? Isso não parece trabalhar para mimIsso deve ser resolvido (deixarei o tratamento de erros para você):
fonte
http://www.example.com/
ouhttp://www.example.com/folder/
)lastIndexOf
não funciona assim. Mas a intenção é clara.fonte
Um forro:
Código completo (em um scala REPL):
Nota :
URI#gePath
já é inteligente o suficiente para remover os parâmetros de consulta e o esquema do protocolo. Exemplos:fonte
Obtenha o nome do arquivo com extensão , sem extensão , apenas extensão com apenas 3 linhas:
Resultado do log:
Espero que ajude você.
fonte
Eu vim com isso:
fonte
Mantenha simples :
fonte
url.getFile()
porurl.toString()
e ele trabalha#
no caminho.fonte
Existem algumas maneiras:
E / S do arquivo Java 7:
Apache Commons:
Usando Jersey:
Substring:
fonte
Paths.get(new URL(strUrl).getFile()).getFileName().toString();
obrigado pela ideia!Aqui está a maneira mais simples de fazer isso no Android. Sei que não funcionará em Java, mas pode ajudar o desenvolvedor de aplicativos Android.
fonte
Crie um objeto de URL a partir da String. Quando você tem um objeto de URL pela primeira vez, existem métodos para extrair facilmente qualquer trecho de informação que você precisa.
Eu recomendo fortemente o site Javaalmanac, que tem muitos exemplos, mas que mudou desde então. Você pode achar http://exampledepot.8waytrips.com/egs/java.io/File2Uri.html interessante:
fonte
Se você deseja obter apenas o nome do arquivo de um java.net.URL (sem incluir nenhum parâmetro de consulta), você pode usar a seguinte função:
Por exemplo, este URL de entrada:
Seria traduzido para esta saída String:
fonte
Descobri que alguns URLs são transmitidos diretamente para
FilenameUtils.getName
retornar resultados indesejados e isso precisa ser agrupado para evitar explorações.Por exemplo,
retorna
o que duvido que alguém queira permitir.
A função a seguir parece funcionar bem e mostra alguns desses casos de teste e retorna
null
quando o nome do arquivo não pode ser determinado.Isso é finalizado com alguns casos de testes simples no exemplo a seguir:
fonte
Os URLs podem ter parâmetros no final, isso
fonte
/
pode aparecer em fragmento. Você extrairá as coisas erradas.O
Url
objeto em urllib permite acessar o nome de arquivo sem escape do caminho. aqui estão alguns exemplos:fonte
resposta de Andy refeito usando split ():
fonte
fonte
Que tal agora:
fonte
Para retornar o nome do arquivo sem extensão e sem parâmetros, use o seguinte:
Para retornar o nome do arquivo com extensão sem parâmetros, use o seguinte:
fonte
Além dos métodos avançados, meu truque simples é
StringTokenizer
:fonte
Se você estiver usando o Spring , há um auxiliar para lidar com URIs. Aqui está a solução:
fonte
retornar novo arquivo (Uri.parse (url) .getPath ()). getName ()
fonte
fonte
Eu tenho o mesmo problema, com o seu. Eu resolvi isso com isso:
fonte
importar java.io. *;
Eu espero que isso te ajude.
fonte