2010-05-09 13 views

Respuesta

29

No directamente, no - getResourceAsStream() tiene como objetivo devolver una vista en recursos de solo lectura.

Si sabe que el recurso es un archivo que se puede escribir, puede pasar por algunos aros, p.

URL resourceUrl = getClass().getResource(path); 
File file = new File(resourceUrl.toURI()); 
OutputStream output = new FileOutputStream(file); 

Esto debería funcionar bien en sistemas de estilo Unix, pero las rutas de los archivos de Windows pueden dar esta indigestión. Pruébelo y descubra, sin embargo, puede estar bien.

+0

Lamentablemente, no estaba bien. Tuve que agregar un 'toString()' al 'toUri()': 'nuevo archivo (resourceUrl.toURI(). ToString());'. Pero ahora, se lanza una 'FileNoFoundException' en la tercera línea:' "vfszip: \ C: \ jboss-5.1.0.GA \ server \ default \ deploy \ IMAss4.war \ WEB-INF \ classes \ wservices \ markers.txt (El nombre del archivo, el nombre del directorio o la sintaxis de la etiqueta del volumen es incorrecto) "' –

+0

@Andreas: OK, es el sistema de archivos virtual interno de JBoss el que se interpone. Es por eso que lo que estás tratando de hacer es desaconsejable. – skaffman

+0

Entonces, ¿hay alguna forma de poner el archivo en la carpeta 'Páginas Web' y leer/escribir desde mi Servicio Web? (Vea aquí mi pregunta sobre mi estructura de documentos: http://stackoverflow.com/questions/2797162/getresourceasstream-is-always-returning-null) –

10

¿Hay alguna manera de que pueda escribir en el archivo también?

¿Quién dice que es un archivo? El objetivo de getResourceAsStream() es abstraer eso porque podría no ser cierto. Específicamente, el recurso puede estar situado en un archivo JAR, puede leerse desde un servidor HTTP, o realmente cualquier cosa que el implementador del ClassLoader pueda imaginar.

No debería realmente querer escribir a un recurso que es parte de la distribución de su programa. En términos conceptuales, es lo incorrecto en la mayoría de los casos. La configuración o los datos específicos del usuario deben ir al Preferences API o al directorio de inicio del usuario.

+0

Entonces, ¿hay alguna manera de acceder a un archivo que se encuentra donde el jsp páginas son? es decir, directamente en la carpeta 'Páginas Web'? del Servicio web, por ejemplo, –

+3

Esta respuesta no proporciona una respuesta. Debería ser un comentario. – dghubble

Cuestiones relacionadas