2011-05-16 60 views
17

aquí está la estructura de mi proyecto.Maven exec: java: ¿cómo abrir y leer un archivo en el directorio de recursos?

proj 
    ---src 
    ----main 
     ----java 
      ----Main.java 
     ----resources 
      ----res.txt 

Estoy usando el plugin m2eclipse con Eclipse. En Main.java, tengo

File f = new File("res.txt"); System.out.println(f.getAbsolutePath()); 

Cuando corro mvn exec: java, el camino quedó impresa es "... \ proj \ res.txt". ¿Cómo puedo hacer que busque el archivo de recursos en el directorio "... \ proj \ target \ classes"?

EDIT:

Gracias por las respuestas a mi pregunta original. Tengo una pregunta de seguimiento:

Así que básicamente lo que quiero hacer es hacer que la clase principal lea "res.txt" y luego generar un nuevo "newres.txt" en el directorio de recursos para que pueda empaquete este nuevo "newres.txt" en el archivo jar en la fase del paquete más tarde. Actualmente monté este ejecutivo: java a la fase de preparación del paquete. ¿Cómo debo crear este "newres.txt" en el directorio de recursos sin una ruta absoluta codificada o dependiendo de la estructura de directorios de Maven?

Respuesta

19

Supongo que responderé a mi propia pregunta, Thread.currentThread().getContextClassLoader().getResourceAsStream() funciona mejor para mí, especialmente cuando el proyecto produce una dependencia jar para otro proyecto web.

+0

¡Eres el mejor! GRACIAS – Angelo

1

Cuando se ejecuta desde eclipse, res.txt se crea en/reader desde la carpeta donde se inicia eclipse. De ahí la salida.

Si desea hacer que el código vea el archivo en una carpeta específica, que está presente en su classpath, entonces debe intentar usar el método getResourceAsStream().

O bien, puede especificar la ruta absoluta del archivo.

12

Trate

InputStream IS = Main.class.getResourceAsStream("res.txt"); 

para acceder al contenido de res.txt. Preste atención a la codificación de su archivo de texto (tenga cuidado con los valores predeterminados). Si su proyecto maven está configurado en UTF-8, por ejemplo, asegúrese de que res.txt esté codificado en UTF-8 también, de lo contrario, obtendrá errores graciosos en el tiempo de ejecución.

+0

Más sobre esto en un blog que crearon recientemente: http://tshikatshikaaa.blogspot.nl/2012/07/maven-how-to-access-filesdata- in.html – JVerstry

+0

Consulte http://www.javaworld.com/javaqa/2003-08/01-qa-0808-property.html?page=2 sobre cuándo usar un '/' inicial para la ruta del recurso. – leo

13

Figura I añadiría las respuestas.

También puede utilizar:

InputStream file = ClassLoader.getSystemResourceAsStream("res.txt"); 
+1

¡Esto resolvió mi problema para mí! ¡Muchas gracias por tomarse el tiempo para escribir esta solución! – Wulf

+0

¡me alegro de que haya ayudado! – Cuga

Cuestiones relacionadas