2010-05-07 8 views
9

Ho bisogno di ottenere un vero percorso per il file nella mia directory WebContent, in modo che il framework che utilizzo possa accedere a quel file. Prende solo il file String come attributo, quindi ho bisogno di ottenere il vero percorso di questo file nella directory WebContent.Come posso ottenere il percorso reale per il file nella mia cartella WebContent?

Uso Spring Framework, quindi è consigliabile eseguire la soluzione in primavera.

risposta

12

Se è necessario in una servlet, utilizzare getServletContext().getRealPath("/filepathInContext")!

+4

Il controller implementa ServlexContextAware – OrangeDog

+1

Il commento di OrangeDog è corretto. Solo una rapida correzione, dovrebbe essere ServletContextAware (non Servlex ...) – Felby

0

In situazioni come queste tendo ad estrarre il contenuto di cui ho bisogno come risorsa (MyClass.getClass(). GetResourceAsStream()), scriverlo come un file in una posizione temporanea e utilizzare questo file per l'altra chiamata.

In questo modo non devo preoccuparmi del contenuto contenuto solo nei barattoli o che si trova da qualche parte a seconda del contenitore Web in uso.

+0

@tangens - Io non credo che lui vuole leggere una risorsa dal classloader webapps; per esempio. un file in un JAR in una GUERRA. Vuole solo ottenere il percorso di un file all'interno del contenitore web. –

0

Includere la richiesta come parametro. Primavera sarà quindi passare l'oggetto di richiesta quando si chiama il metodo mappato

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

Questo approccio utilizza il caricatore di risorse per ottenere il percorso assoluto in un file nella tua app, quindi sale alcune cartelle nella cartella principale dell'app. Nessun contesto servlet richiesto! Questo dovrebbe funzionare se hai un "web.xml" nella tua cartella WEB-INF. Tieni presente che potresti prendere in considerazione l'idea di utilizzarlo esclusivamente per lo sviluppo, in quanto questo tipo di configurazione viene solitamente archiviata esternamente dall'app. .

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 ("") - In questo modo non funziona se il contenuto è stato reso disponibile da un archivio .war. getServletContext() sarà nullo.

In questo caso possiamo utilizzare un altro modo per ottenere un percorso reale. Questo è l'esempio di ottenere un percorso di un file di proprietà C:/Program Files/Tomcat 6/webapps/frontend/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

tenta di utilizzare questo quando si desidera utilizzare arff.txt nel vostro sviluppo e livello di produzione troppo

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

Sebbene questo snippet di codice possa essere la soluzione, [inclusa una spiegazione] (// meta.stackexchange.com/questions/114762/explaining-entely- risposte basate sul codice) aiuta davvero a migliorare la qualità del tuo post.Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. – yivi

+0

@yivi l'ho aggiornato se lo trovate buono –

1

devi dire java per cambiare il percorso dal PC nel progetto Java in modo se si utilizza l'uso di primavera:

@Autowired 
ServletContext c; 

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

ma se si utilizza servlet basta usare

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

modo che il percorso sarà /webapp/images/ :)

Problemi correlati