2010-05-07 22 views
9

Necesito obtener una ruta de acceso real para el archivo en mi directorio WebContent, para que el marco que utilizo pueda acceder a ese archivo. Solo toma el archivo String como atributo, por lo que necesito obtener la ruta real a este archivo en el directorio WebContent.¿Cómo puedo obtener una ruta real para el archivo en mi carpeta WebContent?

Utilizo Spring Framework, por lo que la solución debería ser posible de hacer en primavera.

Respuesta

12

Si necesita esto en un servlet, ¡utilice getServletContext().getRealPath("/filepathInContext")!

+4

Haga que el controlador implemente ServlexContextAware – OrangeDog

+1

El comentario de OrangeDog es correcto. Solo una corrección rápida, debe ser ServletContextAware (no Servlex ...) – Felby

0

En situaciones como estas, suelo extraer el contenido que necesito como recurso (MyClass.getClass(). GetResourceAsStream()), escribirlo como un archivo en una ubicación temporal y usar este archivo para la otra llamada.

De esta forma no tengo que preocuparme por el contenido que solo está contenido en frascos o está ubicado en algún lugar dependiendo del contenedor web que estoy usando actualmente.

+0

@tangens - No creo que él quiere leer un recurso desde el cargador de clases aplicaciones web; p.ej. un archivo en un JAR en una GUERRA. Solo quiere obtener la ruta de acceso de un archivo dentro del contenedor web. –

0

Incluya la solicitud como parámetro. Primavera pasará entonces el objeto solicitud cuando se llama al método asignada

@RequestMapping ..... 
public String myMethod(HttpServletRequest request) { 
    String realPath = request.getRealPath("/somefile.txt"); 
    ... 
0

Este enfoque utiliza el cargador de recursos para obtener la ruta absoluta a un archivo en su aplicación, y luego sube algunas carpetas a la carpeta raíz de la aplicación. ¡No se requiere contexto de servlet! Esto debería funcionar si tiene un "web.xml" en su carpeta WEB-INF. Tenga en cuenta que es posible que desee considerar utilizar esto únicamente para el desarrollo, ya que este tipo de configuración generalmente se almacena mejor externamente desde la aplicación. .

public String getAppPath() 
{ 
    java.net.URL r = this.getClass().getClassLoader().getResource("web.xml"); 
    String filePath = r.getFile(); 
    String result = new File(new File(new File(filePath).getParent()).getParent()).getParent(); 

    if (! filePath.contains("WEB-INF")) 
    { 
     // Assume we need to add the "WebContent" folder if using Jetty. 
     result = FilenameUtils.concat(result, "WebContent"); 
    } 

    return result; 
} 
12

getServletContext() getRealPath ("") - De esta manera no va a funcionar si el contenido está siendo puesto a disposición de un archivo .war. getServletContext() será nulo.

En este caso podemos utilizar otra forma de obtener una ruta real. Este es un ejemplo de contraer una ruta a un archivo de propiedades de C:/Archivos de programa/Tomcat 6/webapps/myapp/WEB-INF/classes/somefile.properties:

// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/" 
URL r = this.getClass().getResource("/"); 

// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/" 
String decoded = URLDecoder.decode(r.getFile(), "UTF-8"); 

if (decoded.startsWith("/")) { 
    // path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/" 
    decoded = decoded.replaceFirst("/", ""); 
} 
File f = new File(decoded, "somefile.properties"); 
-1

intenta utilizar esta opción cuando desee utilizar arff.txt en su desarrollo y nivel de producción demasiado

String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt"); 
+0

Si bien este fragmento de código puede ser la solución, [incluye una explicación] (// meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers) realmente ayuda a mejorar la calidad de su publicación.Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. – yivi

+0

@yivi lo actualicé si le parece bien votar arriba –

1

usted debe decirle a java para cambiar la ruta de su PC en su proyecto java, por lo si se utiliza el uso de primavera:

@Autowired 
ServletContext c; 

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 

pero si se utiliza servlets sólo tiene que utilizar

String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images"); 

por lo que el camino será /webapp/images/ :)

Cuestiones relacionadas