En Java, dada una java.net.URL
o una String
en forma de http://www.example.com/some/path/to/a/file.xml
, ¿cuál es la forma más fácil de obtener el nombre del archivo, menos la extensión? Entonces, en este ejemplo, estoy buscando algo que regrese "file"
.
Se me ocurren varias formas de hacerlo, pero estoy buscando algo que sea fácil de leer y breve.
Respuestas:
En lugar de reinventar la rueda, ¿qué tal usar Apache commons-io :
fuente
URL#getPath
yString#substring
/Path#getFileName
oFile#getName
).fuente
substring()
http://example.org/file#anchor
,http://example.org/file?p=foo&q=bar
nihttp://example.org/file.xml#/p=foo&q=bar
String url = new URL(original_url).getPath()
y agrega un caso especial para nombres de archivo que no contienen un,.
entonces esto funciona bien.Si no necesita deshacerse de la extensión de archivo, aquí hay una manera de hacerlo sin recurrir a la manipulación de cadenas propensa a errores y sin usar bibliotecas externas. Funciona con Java 1.7+:
fuente
URI.getPath()
devuelve unString
, así que no veo por qué no funcionaríagetPath
y usa la sobrecarga de URI en su lugar.Paths.get(new URI(url))
? Eso no parece funcionar para míEsto debería cortarlo (te dejaré el manejo de errores):
fuente
http://www.example.com/
ohttp://www.example.com/folder/
)lastIndexOf
no funciona de esta manera Pero la intención es clara.fuente
Un trazador de líneas:
Código completo (en una escala REPL):
Nota :
URI#gePath
ya es lo suficientemente inteligente como para quitar los parámetros de consulta y el esquema del protocolo. Ejemplos:fuente
Obtenga el nombre del archivo con extensión , sin extensión , solo extensión con solo 3 líneas:
Resultado del registro:
Espero que te ayude.
fuente
Se me ocurrió esto:
fuente
Hay algunas formas:
E / S de archivos Java 7:
Apache Commons:
Usando Jersey:
Subcadena:
fuente
Paths.get(new URL(strUrl).getFile()).getFileName().toString();
Gracias por la idea!Mantenlo simple :
fuente
url.getFile()
conurl.toString()
y funciona con#
en la ruta.fuente
Aquí está la forma más sencilla de hacerlo en Android. Sé que no funcionará en Java, pero puede ayudar al desarrollador de aplicaciones de Android.
fuente
Cree un objeto URL a partir de la cadena. Cuando tiene un objeto URL por primera vez, existen métodos para extraer fácilmente cualquier fragmento de información que necesite.
Puedo recomendar encarecidamente el sitio web Javaalmanac que tiene toneladas de ejemplos, pero que desde entonces se ha mudado. Puede encontrar http://exampledepot.8waytrips.com/egs/java.io/File2Uri.html interesante:
fuente
Si desea obtener solo el nombre de archivo de un java.net.URL (sin incluir ningún parámetro de consulta), puede usar la siguiente función:
Por ejemplo, esta URL de entrada:
Sería traducido a esta cadena de salida:
fuente
Descubrí que algunas URL se pasan directamente a
FilenameUtils.getName
devolver resultados no deseados y esto debe ser cerrado para evitar exploits.Por ejemplo,
devoluciones
que dudo que alguien quiera permitir.
La siguiente función parece funcionar bien y muestra algunos de estos casos de prueba, y regresa
null
cuando no se puede determinar el nombre de archivo.Esto está envuelto con algunos casos de pruebas simples en el siguiente ejemplo:
fuente
Las URL pueden tener parámetros al final, esto
fuente
/
Puede aparecer en fragmentos. Extraerás las cosas incorrectas.El
Url
objeto en urllib le permite acceder al nombre de archivo sin escape de la ruta. Aquí hay unos ejemplos:fuente
La respuesta de Andy se rehizo usando split ():
fuente
fuente
Qué tal esto:
fuente
Para devolver un nombre de archivo sin extensión y sin parámetros, utilice lo siguiente:
Para devolver un nombre de archivo con extensión sin parámetros use esto:
fuente
Más allá de todos los métodos avanzados, mi truco simple es
StringTokenizer
:fuente
Si está utilizando Spring , hay un ayudante para manejar los URI. Aquí está la solución:
fuente
devolver nuevo archivo (Uri.parse (url) .getPath ()). getName ()
fuente
fuente
Tengo el mismo problema con el tuyo. Lo resolví con esto:
fuente
import java.io. *;
Espero que esto ayude.
fuente