2012-09-27 41 views
6

consigo un archivo así:Obtener ruta real de un archivo en una clase Java

String myFile = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv"; 
File statsFile = new File(myFile); 

Pero quiero sólo para que la ruta relativa como stats/stats.csv. No quiero tener que escribir la ruta completa en mi código.

En un servlet, lo hago de esta manera:

File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv"); 

Pero aquí no se encuentra en un servlet. Entonces, ¿cuál es la forma equivalente en una clase de Java?

Respuesta

2

Debería ponerlo en CLASSPATH y leerlo desde InputStream adquirido usando getResourceAsStream(). Es la forma independiente del camino para acceder a un archivo.

+0

Él dice que no quiere usarlo en un Servlet – Razvan

+0

Así que obténgalo del tiempo de ejecución. – duffymo

+1

Uno podría obtenerlo a través de 'SomeApplicationClass.class.getResourceAsStream()' –

0
String basePath = "D:/dev/workspace/MyProject/WebContent"; 
String absolutePath = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv"; 

String relativePath = new File(basePath).toURI(). 
         relativize(new File(absolutePath).toURI()).getPath(); 

System.out.println(relativePath); // stats/stats.csv 

basePath es el camino, con respecto al cual desea obtener Relative Path.

+0

De hecho, busco una manera de encontrar 'basePath' sin escribirlo. – Emilie

+0

@Jim ... Entonces su trabajo aún se reduce ... También enfrenté el mismo problema mientras trabajaba en uno de mis proyectos ... entonces solo descubrí que puedo hacer esto ... –

0

Encontré una solución. Puedo usar mi JSP para usar File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv") y luego pasar statsFile a mi clase.

Cuestiones relacionadas