2011-09-30 9 views
5

Tengo una aplicación Java donde intento cargar un archivo de texto que se incluirá en el contenedor.getResource con la referencia del directorio principal

Cuando hago getClass().getResource("https://stackoverflow.com/a/b/c/"), puedo crear la URL para esa ruta y puedo imprimirla y todo se ve bien.

Sin embargo, si intento getClass().getResource(/a/b/../"), me aparece una URL null.

Parece que no le gusta el .. en la ruta. ¿Alguien ve lo que estoy haciendo mal? Puedo publicar más código si fuera útil.

+0

Esta pregunta responde a la pregunta que venía a buscar. Tengo un getResource ("../ icons/SomeIcon.png") que devuelve nulo cuando se carga desde un contenedor pero devuelve el recurso correctamente cuando se carga desde el sistema de archivos. Apesta que Java no resuelva el ... en ambos casos. – Trejkaz

Respuesta

5

El normalize() methods (hay cuatro de ellos) en la clase FilenameUtils podría ayudarlo. Está en el Apache Commons IO library.

final String name = "https://stackoverflow.com/a/b/../"; 
final String normalizedName = FilenameUtils.normalize(name, true); // "https://stackoverflow.com/a/" 
getClass().getResource(normalizedName); 
+1

Impresionante, esto funcionó. Usé el método normalize (name, true) para mantener las barras de estilo de unix (/) en los sistemas de Windows. ¡Gracias! –

+0

@Trejkaz: ¡Gracias por la sugerencia de edición! Desafortunadamente fue rechazado por otros y tengo que editarlo manualmente. Para compensar tus +2 puntos perdidos, he revisado tus publicaciones y he votado a favor algunos de ellos. – palacsint

2

La ruta especificada en getResource() no es una ruta del sistema de archivos y no se puede resolver canónicamente de la misma forma que las rutas se resuelven con el objeto File (y su tipo). ¿Puedo entender que estás tratando de leer un recurso relacionado con otra ruta?

+0

Ya estoy obteniendo partes de la ruta desde diferentes lugares en el código, así que cuando combino las cadenas tienen ".." en ellas. No estoy tratando de romper el directorio base que obtengo con getResource ("/"). El recurso que estoy tratando de leer es relativo a otra ruta, pero aún dentro del contenedor y algo que podría leer si eliminé manualmente el "..." de la ruta. Tal vez eso es lo que tendré que hacer. –

Cuestiones relacionadas